Как проверить на T-SQL?

Привет!!!Есть переменная
Declare @StringValue varchar(<b>255</b>)
в нее пишуться значения как числовые так и не числовые, необхродимо узнать до конвертации строки в число - число там записано или строка...Есть какая нибудь фича типа IsNumeric() или типа того как сделать ее???Спасибо большое!!!
14 ответов

BOL::ISNUMERIC


хочется добавить что не всякое выражение которое дает IsNumeric() = True отконвертиться в тот числовой тип который вам нужен так что если вам нужено конвертить в тип int то просто IsNumeric недостаточно


For any specific "IsNumeric" write you own functions, like this below
DECLARE @pattern varchar(<b>255</b>)
SET @pattern = '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' <i>--unsigned integer
</i>
DECLARE @test varchar(<b>255</b>)
SET @test='56'
IF RIGHT('x000000000'+ @test,<b>10</b>) LIKE @pattern
	PRINT @TEST + ' is OK'
ELSE
	PRINT @TEST + ' is BAD'

SET @test='56.'
IF RIGHT('x000000000'+ @test,<b>10</b>) LIKE @pattern
	PRINT @TEST + ' is OK'
ELSE
	PRINT @TEST + ' is BAD'

SET @test='.56'
IF RIGHT('x000000000'+ @test,<b>10</b>) LIKE @pattern
	PRINT @TEST + ' is OK'
ELSE
	PRINT @TEST + ' is BAD'

SET @test='56A'
IF RIGHT('x000000000'+ @test,<b>10</b>) LIKE @pattern
	PRINT @TEST + ' is OK'
ELSE
	PRINT @TEST + ' is BAD'

SET @test=''
IF RIGHT('x000000000'+ @test,<b>10</b>) LIKE @pattern
	PRINT @TEST + ' is OK'
ELSE
	PRINT @TEST + ' is BAD'


А что еще нужно сделать что бы быть уверенным на 100% что это число, если IsNumeric не всегда срабатывает?


To BugsBunny Ох ниче себе что ето такое? Страшно даже пробывать


Числа бывают целые и дробные можно представить в строке как int,float,float "+E",hex ,bin ,с точкой, с запятой и т.п.вам как надо чтоб было?


To Bugs Bunny56 is OK56. is BAD.56 is BAD56A is BAD is BAD.56 я бы защитал токо не знаю CONVERT прохавает или нет...


To Bugs Bunny56 is OK56. is BAD.56 is BAD56A is BAD is BAD.56 я бы защитал токо не знаю CONVERT прохавает или нет...
I personally wouldn't (remember unsigned integer comment). Though 56. might be


Числа бывают целые и дробные можно представить в строке как int,float,float "+E",hex ,bin ,с точкой, с запятой и т.п.вам как надо чтоб было?


Надо уметь распознать максимум числовых форматов которые бы смог сконвертить в число типа ****** из строки функция типа CONVERT...По моему ясно выразился...


Ну тогда отталкиваемся от обратного - все что содержит что либо отличное от цифр и точки не есть число.
DECLARE @pattern varchar(<b>255</b>)
SET @pattern = '%[^0-9.]%' 

DECLARE @test varchar(<b>255</b>)
SET @test='56'
IF RIGHT('x000000000'+ @test,<b>10</b>) LIKE @pattern
	PRINT @TEST + ' is BAD'
ELSE
	PRINT @TEST + ' is OK'
Правда все таки еще надо посчитать чтобы количество точек было <= 1


А что еще нужно сделать что бы быть уверенным на 100% что это число, если IsNumeric не всегда срабатывает?
IsNumeric "всегда срабатывает" and "уверенным на 100%"it's a CAST/CONVERT that's failing
DECLARE @test varchar(<b>255</b>)
SET @test = '56.'
PRINT 'ISNUMERIC=' + CAST(ISNUMERIC(@test) as varchar(<b>255</b>))
PRINT CAST(@test as int)


BugsBunny дело говоритISNUMERIC returns 1 when the input expression evaluates to a valid integer, floating point number, money or decimal type; otherwise it returns 0. A return value of 1 guarantees that expression can be converted to one of these numeric types.Т.е. если вы не намерены конвертировать значения скажем в smallint, а только в один из указанных выше типов данных, то ISNUMERIC гарантирует вам что конвертация возможна


So, assuming that by your "число типа ****** " you meant "float" then you are in the safest position with ISNUMERIC+CAST operations