преобразование varchar в float.

MorAdan
Дата: 17.02.2010 11:39:58
Есть дилема. Проверяю строку или можно ее конвертнуть в float.
Например вот такой селект
Select IsNumeric('1.2'),cast ('1.2' as float)
Все ок он отрабатывает и показывает что можно конвертнуть и конвертирует.
А вот с этим проблема.
Select IsNumeric('1,2'),cast ('1,2' as float)
Показывает что может конфертнуть но при cast дает вот такую ошибку
"Ошибка при преобразовании типа данных varchar к float."

Почему так и как это обойти? Как вариант делать замену "," на "."?
Crimean
Дата: 17.02.2010 11:46:48
а все от гениальности авторов isnumeric-а
не советую пользоваться этим "гениальным" изобретением:

BOL
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.


то есть к одному из перечисленных типов оно сконвертируется. а вот к какому - сам догадайся. пример

select convert( money, '1,2' )
select convert( float, '1,2' )


---------------------
12.0000

(1 row(s) affected)

Server: Msg 8114, Level 16, State 5, Line 2
Error converting data type varchar to float.
iap
Дата: 17.02.2010 11:47:12
MorAdan
Есть дилема. Проверяю строку или можно ее конвертнуть в float.
Например вот такой селект
Select IsNumeric('1.2'),cast ('1.2' as float)
Все ок он отрабатывает и показывает что можно конвертнуть и конвертирует.
А вот с этим проблема.
Select IsNumeric('1,2'),cast ('1,2' as float)
Показывает что может конфертнуть но при cast дает вот такую ошибку
"Ошибка при преобразовании типа данных varchar к float."

Почему так и как это обойти? Как вариант делать замену "," на "."?
Только так! Вместо десятичной точки ничего нельзя серверу передавать.
И вот это посмотрите (то, что касается FLOAT).
MorAdan
Дата: 17.02.2010 12:00:54
Всем спасибо.
storm_sw
Дата: 13.04.2011 18:28:07
MorAdan
...
...
А вот с этим проблема.
Select IsNumeric('1,2'),cast ('1,2' as float)
Показывает что может конфертнуть но при cast дает вот такую ошибку
"Ошибка при преобразовании типа данных varchar к float."

Почему так и как это обойти? Как вариант делать замену "," на "."?

iap
Только так! Вместо десятичной точки ничего нельзя серверу передавать.


Select IsNumeric('1,2'), Cast(replace('1,2', ',','.') as float)
iap
Дата: 14.04.2011 08:59:45
storm_sw
MorAdan
...
...
А вот с этим проблема.
Select IsNumeric('1,2'),cast ('1,2' as float)
Показывает что может конфертнуть но при cast дает вот такую ошибку
"Ошибка при преобразовании типа данных varchar к float."

Почему так и как это обойти? Как вариант делать замену "," на "."?

iap
Только так! Вместо десятичной точки ничего нельзя серверу передавать.


Select IsNumeric('1,2'), Cast(replace('1,2', ',','.') as float)
А так?
SELECT ISNUMERIC('1,2,3'), CAST(REPLACE('1,2,3',',','.') AS FLOAT);
И почему надо реплэйсить именно запятую, объясните, пожалуйста.