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

Откуда: Белгород
Сообщений: 458
Имеем столбец со значениями. Большинство из которых число, есть и произвольные строки...
Вопрос в следующем, как принудительно сконвертировать строку в число, при условии если не сможет пройти конвертация, заменить каким либо значением по умолчанию ? Реально ли такое?
при cast или convert выполнение запроса выдает: Error converting data type varchar to numeric.
А если по умолчанию чем-то заменить?
select cast(value as decimal(9,2)) from table
Что нужно добавить?
Реально ли ?
22 ноя 11, 15:30    [11638332]     Ответить | Цитировать Сообщить модератору
 Re: Как принудительно сконвертировать строку в число?  [new]
adv
Member

Откуда:
Сообщений: 3333
ISNUMERIC()
22 ноя 11, 15:38    [11638387]     Ответить | Цитировать Сообщить модератору
 Re: Как принудительно сконвертировать строку в число?  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
Алексей Кр,

update Таблица
set Поле = CASE WHEN ISNUMERIC(Поле)=1 THEN Поле ELSE 'Default значение без кавычек' END

ALTER TABLE Таблица ...
22 ноя 11, 15:41    [11638412]     Ответить | Цитировать Сообщить модератору
 Re: Как принудительно сконвертировать строку в число?  [new]
Алексей Кр
Member

Откуда: Белгород
Сообщений: 458
Всем спасибо!
Все получилось!
select case when IsNumeric(value)=0 then 0 else cast(REPLACE(value, ',','.') as decimal(9,2)) end
from table
22 ноя 11, 16:00    [11638592]     Ответить | Цитировать Сообщить модератору
 Re: Как принудительно сконвертировать строку в число?  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Алексей Кр
Всем спасибо!
Все получилось!
select case when IsNumeric(value)=0 then 0 else cast(REPLACE(value, ',','.') as decimal(9,2)) end
from table
А для строки '$' что получится?
Или для '1.0E+2'?

А говорите 'всё'!
22 ноя 11, 16:38    [11638982]     Ответить | Цитировать Сообщить модератору
 Re: Как принудительно сконвертировать строку в число?  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
SELECT
 CASE
  WHEN ISNUMERIC([Value])=1 AND [Value] LIKE '%[0-9]%' AND [Value] NOT LIKE '%[^-+. 0-9]%'
  THEN CAST([Value]AS DEC(9,2))
  ELSE 0
 END
FROM [Table];
На переполнение здесь, правда, ничего не проверяется...
22 ноя 11, 16:46    [11639063]     Ответить | Цитировать Сообщить модератору
 Re: Как принудительно сконвертировать строку в число?  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Забыл, что у Вас там запятая...
Ну, в общем, вместо [Value] надо использовать REPLACE([Value],',','.')
22 ноя 11, 16:48    [11639081]     Ответить | Цитировать Сообщить модератору
 Re: Как принудительно сконвертировать строку в число?  [new]
Алексей Кр
Member

Откуда: Белгород
Сообщений: 458
iap
SELECT
 CASE
  WHEN ISNUMERIC([Value])=1 AND [Value] LIKE '%[0-9]%' AND [Value] NOT LIKE '%[^-+. 0-9]%'
  THEN CAST([Value]AS DEC(9,2))
  ELSE 0
 END
FROM [Table];
На переполнение здесь, правда, ничего не проверяется...


Т.е. на переполнение и ничего не проверяется?
Зато, по Вашему примеру, отрабатывается успешно следующие виды значении: ',4.55', '.4.,55,' Получаем '0.00'
Спасибо большое за совет! :)

Только возникает вопрос, а реально ли вытащить значение из такого рода входных строк: '.4.,55,', '4,55.,' и т.п. ?
23 ноя 11, 09:29    [11642066]     Ответить | Цитировать Сообщить модератору
 Re: Как принудительно сконвертировать строку в число?  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
Алексей Кр,

Все реально, если знать и суметь формализовать правила, по которым нужно вытаскивать.
23 ноя 11, 09:46    [11642137]     Ответить | Цитировать Сообщить модератору
 Re: Как принудительно сконвертировать строку в число?  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Алексей Кр
Зато, по Вашему примеру, отрабатывается успешно следующие виды значении: ',4.55', '.4.,55,' Получаем '0.00'
Спасибо большое за совет! :)
Не понял сарказма.
По-Вашему, ',4.55' и '.4.,55,' могут конвертироваться в DEC(9,2)?
Ну так кто Вам мешает предложить свой способ конвертирования?
Я не мешаю - вперёд!
23 ноя 11, 10:10    [11642236]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить