Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Объясните логику работы функции isnumeric  [new]
ShIgor
Member

Откуда: Нижний Новгород
Сообщений: 2159
select isnumeric('\'), isnumeric('/')

(No column name)(No column name)
10


если .,+- и знаки валют я еще как-то понимаю, то backslash тут каким боком?
12 мар 19, 10:29    [21829990]     Ответить | Цитировать Сообщить модератору
 Re: Объясните логику работы функции isnumeric  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6016
ShIgor,

в данном случае это спец символ переноса строки
12 мар 19, 11:06    [21830011]     Ответить | Цитировать Сообщить модератору
 Re: Объясните логику работы функции isnumeric  [new]
Павел Воронцов
Member

Откуда: Новосибирск
Сообщений: 2363
Блог
select isnumeric('\1'), isnumeric('/'),try_CAST('\' as numeric),\ as ddd
Да, интересно
12 мар 19, 11:11    [21830014]     Ответить | Цитировать Сообщить модератору
 Re: Объясните логику работы функции isnumeric  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6016
TRY_PARSE более новая функция и ИМХО её правильнее использовать
12 мар 19, 11:11    [21830015]     Ответить | Цитировать Сообщить модератору
 Re: Объясните логику работы функции isnumeric  [new]
invm
Member

Откуда: Москва
Сообщений: 8438
ShIgor
backslash тут каким боком?
Он совпадает с символом йены в какой-то из японских кодировок.
12 мар 19, 11:40    [21830053]     Ответить | Цитировать Сообщить модератору
 Re: Объясните логику работы функции isnumeric  [new]
ShIgor
Member

Откуда: Нижний Новгород
Сообщений: 2159
invm,

точно, причем cast('\' as money) - ok, а cast('\' as numeric) - error
12 мар 19, 12:00    [21830078]     Ответить | Цитировать Сообщить модератору
 Re: Объясните логику работы функции isnumeric  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6016
invm
ShIgor
backslash тут каким боком?
Он совпадает с символом йены в какой-то из японских кодировок.

да
автор
So in code page 932, 0x5c (YEN SIGN) has to have a round trip mapping to U+005c (REVERSE SOLIDUS), with a mere best fit mapping to U+00a5 (YEN SIGN).

And in code page 949, 0x5c (WON SIGN) has to have a round trip mapping to U+005c (REVERSE SOLIDUS), with a mere best fit mapping to U+20a9 (WON SIGN).
12 мар 19, 12:42    [21830146]     Ответить | Цитировать Сообщить модератору
 Re: Объясните логику работы функции isnumeric  [new]
bozarland
Member

Откуда:
Сообщений: 2
ShIgor
invm,

точно, причем cast('\' as money) - ok, а cast('\' as numeric) - error


а так

select isnumeric('5.91643E7')

select cast('5.91643E7' as numeric)
select cast('5.91643E7' as money)

и только так работает
select cast('5.91643E7' as float)
13 мар 19, 12:57    [21831212]     Ответить | Цитировать Сообщить модератору
 Re: Объясните логику работы функции isnumeric  [new]
iap
Member

Откуда: Москва
Сообщений: 46633
ShIgor
invm,

точно, причем cast('\' as money) - ok, а cast('\' as numeric) - error
В документации же сказано, что ISNUMERIC() возвращает 1, если возможно преобразование хотя бы в какой-нибудь числовой тип.
В то же время числовые типы MONEY, FLOAT допускают свои специфические символы, которые не дают
преобразовать в другие числовые типы, например, INT, которые могут содержать только цифры, минус, плюс да лидирующие пробелы.
Поэтому обычно проверять конвертируемость строкового представления в числовой тип только функцией ISNUMERIC() недостаточно.
Надо ещё проверить отсутствие недопустимых символов.
13 мар 19, 13:16    [21831244]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить