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

Откуда:
Сообщений: 4
Проблема такова: в поле типа text хранятся цифры(хотя может быть и что попало). Необходимо перевести его в float. Суть проблемы в разделителе дробной части(она может быть . или ,)
select convert(float, 10.12), convert(decimal(18, 2), 10.12)   
Cyrillic_General_CI_AS

Манипаляции функциями типа ISNUMERIC, CAST, CONVERT не приносят результата.
select num from table1
20.11
20....11
19,,,,22
qweqwe
19,22
select num, CAST(case ISNUMERIC(num) when 1 then num else NULL end AS float) from table1

Валится на последнем значении(не может распознать чисто 19,22, при том, что в моей кодировке по умолчанию как раз таки "," и является разделителем)
1)Как сделать запрос в данном примере?
2)Как сделать запрос универсальным? для тех кодировок у кого разделитель - точка?
22 окт 13, 13:39    [15014406]     Ответить | Цитировать Сообщить модератору
 Re: Поле с типом Text >> Float  [new]
iap
Member

Откуда: Москва
Сообщений: 47047
mariahca1,

сервер принимает в качестве разделителя целой и дробной частей только точку.
Всегда.
22 окт 13, 13:42    [15014453]     Ответить | Цитировать Сообщить модератору
 Re: Поле с типом Text >> Float  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
автор
ISNUMERIC, CAST, CONVERT не приносят результата.


REPLACE должна помочь.
22 окт 13, 13:46    [15014500]     Ответить | Цитировать Сообщить модератору
 Re: Поле с типом Text >> Float  [new]
mariahca1
Member

Откуда:
Сообщений: 4
То есть, вот такая штука будет работать ВСЕГДА? не смотря на региональные настройки?

select num, CAST(case ISNUMERIC(num) when 1 then Replace(num,',','.') else NULL end AS float) from table1
22 окт 13, 13:50    [15014542]     Ответить | Цитировать Сообщить модератору
 Re: Поле с типом Text >> Float  [new]
Гость333
Member

Откуда:
Сообщений: 3683
mariahca1
То есть, вот такая штука будет работать ВСЕГДА? не смотря на региональные настройки?

Не, ну в качестве десятичного разделителя в Windows можно ведь задать любой символ. Чтобы работало ВСЕГДА, нужно, чтобы клиентское приложение записывало в базу данных числовые значения с разделителем-точкой.
22 окт 13, 13:55    [15014609]     Ответить | Цитировать Сообщить модератору
 Re: Поле с типом Text >> Float  [new]
mariahca1
Member

Откуда:
Сообщений: 4
Спасибо за советы! 3 часа в гугле и 10 минут на форуме решили проблему!
22 окт 13, 14:05    [15014681]     Ответить | Цитировать Сообщить модератору
 Re: Поле с типом Text >> Float  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31778
mariahca1
То есть, вот такая штука будет работать ВСЕГДА? не смотря на региональные настройки?
Не всегда.

select '$123', CAST(case ISNUMERIC('$123') when 1 then Replace('$123',',','.') else NULL end AS float)
22 окт 13, 15:28    [15015371]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить