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

Откуда: Белгород
Сообщений: 458
Имеем таблицу, в котором хранятся различные значения в колонке [value]
Необходимо добавить колонку во view (в представление), которая отображала бы числовое представление из колонки [value],
т.е. если IsNumeric - то преобразуем например к numeric(9,2), если же IsNumeric=0 то отображаем 0...

Таблица большая, там могут быть всё что угодно... миллион записей...

Делал следующее:

select 
case 
  when IsNumeric(value)=0 then 0
  else cast(REPLACE(REPLACE(REPLACE(value, ',.', '.'), ',,','.'), ',', '.') as Numeric(9,2)) 
end as hsValue,
*
from table1
where ID > 0


И всё равно выходит следующее:
Arithmetic overflow error converting varchar to data type numeric.
не могу сообразить что ему нужно... размер в типах... а как обойти ???

Реально ли обойти данную ситуацию ?
10 ноя 12, 12:55    [13451255]     Ответить | Цитировать Сообщить модератору
 Re: Что делать при преобразованием данных в view из соседней колонки?  [new]
qwerty112
Guest
Алексей Кр
...
И всё равно выходит следующее:
Arithmetic overflow error converting varchar to data type numeric.
не могу сообразить что ему нужно... размер в типах... а как обойти ???

Реально ли обойти данную ситуацию ?

ну типа - даа, размера "не хватает"
сделай по-больше, до 38-ми как бы ещё можно "разгулятся"
else cast(REPLACE(REPLACE(REPLACE(value, ',.', '.'), ',,','.'), ',', '.') as Numeric(38,2)) 
10 ноя 12, 13:12    [13451274]     Ответить | Цитировать Сообщить модератору
 Re: Что делать при преобразованием данных в view из соседней колонки?  [new]
qwerty112
Guest
и вообще, лучше во float преобразовывать,
"числа" ещё и такие бывают ...
select IsNumeric('1e100') as hsValue
10 ноя 12, 13:31    [13451304]     Ответить | Цитировать Сообщить модератору
 Re: Что делать при преобразованием данных в view из соседней колонки?  [new]
Алексей Кр
Member

Откуда: Белгород
Сообщений: 458
Спасибо большое!
Но не помогает (((

	select 
	id,	
	case 
		when IsNumeric(Value)=0 then 0
		else cast(REPLACE(REPLACE(REPLACE(SUBSTRING(Value, 1, 4), ',.', '.'), ',,','.'), ',', '.') as decimal(38,2)) 
	  end as hsValue
	  ,
	Value	  
	   from table1


пришлось SUBSTRING(Value, 1, 4) добавить, т.к. IsNumeric говорит 1 при значении "5,567,1" и фиг поймешь что в бд.... а сконвертить нужно...


честно, что-то мне substring не нравится...
10 ноя 12, 13:33    [13451306]     Ответить | Цитировать Сообщить модератору
 Re: Что делать при преобразованием данных в view из соседней колонки?  [new]
Алексей Кр
Member

Откуда: Белгород
Сообщений: 458
и подскажите пожалуйста, как в запросе добавить чтоб при ошибке вывел ИД строк?, на которых происходит ошибка, чтоб проанализировать что там...
10 ноя 12, 13:37    [13451313]     Ответить | Цитировать Сообщить модератору
 Re: Что делать при преобразованием данных в view из соседней колонки?  [new]
iap
Member

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

ошибка при конвертации

Только внутри CAST в списке SELECTа тоже надо CASE писать.
Потому что сервер может выполнять SELECT сначала, а фильтр потом.
Закончится ошибкой на неправильной строке.
10 ноя 12, 16:41    [13451570]     Ответить | Цитировать Сообщить модератору
 Re: Что делать при преобразованием данных в view из соседней колонки?  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
Алексей Кр
и подскажите пожалуйста, как в запросе добавить чтоб при ошибке вывел ИД строк?, на которых происходит ошибка, чтоб проанализировать что там...
Надо просто выполнить SELECT по условию,
которому удовлетворяют "неправильные" записи
10 ноя 12, 16:43    [13451575]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить