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

Откуда: Tbilisi
Сообщений: 2867
Как я заметила, при конвертировании текстового поля в числовое, выпадает ошибка .
Msg 8114
Msg 8114, Level 16, State 5, Line 1
Error converting data type nvarchar to float.

Оказалось, что в некоторых местах был записан либо просто какой-то текст, либо числа такого типа 231,,6.
Естественно, вычисления не могут быть произведены для таких полей, поэтому я решила, что пусть в таких местах при вычислениях будет присвоен Null.

Только как отловить ошибку, чтобы она присвоила Null, а не вышла бы ошибка?

SELECT	CAST(Replace(answer,',','.') as float)
FROM	ConvertToNum
26 фев 17, 12:25    [20244362]     Ответить | Цитировать Сообщить модератору
 Re: Конвертирование текстового поля в числовое  [new]
invm
Member

Откуда: Москва
Сообщений: 9406
try_convert
26 фев 17, 12:41    [20244391]     Ответить | Цитировать Сообщить модератору
 Re: Конвертирование текстового поля в числовое  [new]
NickBell
Member

Откуда: Tbilisi
Сообщений: 2867
Воспользовалась одним из примеров, но то-то ему TRY_CONVERT не понравился.


SELECT	answer,
		CASE WHEN TRY_CONVERT(float, Replace(answer,',','.')) IS NULL   
			THEN 'Failed'  
			ELSE 'Succeeded'  
		END AS Result  
FROM	ConvertToNum

автор
Msg 195,
'TRY_CONVERT' is not a recognized built-in function name.
26 фев 17, 13:11    [20244441]     Ответить | Цитировать Сообщить модератору
 Re: Конвертирование текстового поля в числовое  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
NickBell
Воспользовалась одним из примеров, но то-то ему TRY_CONVERT не понравился.


SELECT	answer,
		CASE WHEN TRY_CONVERT(float, Replace(answer,',','.')) IS NULL   
			THEN 'Failed'  
			ELSE 'Succeeded'  
		END AS Result  
FROM	ConvertToNum


автор
Msg 195,
'TRY_CONVERT' is not a recognized built-in function name.
TRY_CONVERT появилась в SQL 2012.

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

См. всё, что касается FLOAT
26 фев 17, 13:43    [20244495]     Ответить | Цитировать Сообщить модератору
 Re: Конвертирование текстового поля в числовое  [new]
invm
Member

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

declare @t table (s varchar(30));

insert into @t
values
 ('1'), ('2e10'), ('.'), ('a');

select
 cast(nullif(cast('' as xml).query('xs:float(sql:column("s"))').value('.', 'varchar(50)'), '') as float)
from
 @t;
26 фев 17, 13:51    [20244505]     Ответить | Цитировать Сообщить модератору
 Re: Конвертирование текстового поля в числовое  [new]
NickBell
Member

Откуда: Tbilisi
Сообщений: 2867
Заменила на такой вариант, уже работает так, как надо.
SELECT	
  CASE 
     WHEN ISNUMERIC(answer)=0 THEN Null
     WHEN ISNUMERIC(answer)=1 THEN CAST(Replace((Replace(answer,',,','.')),',','.') as float)
  END pasuxi
FROM ConvertToNum


Потом надо будет некоторую реорганизацию сделать в базе, чтобы такого недоразумения больше не было бы.
26 фев 17, 14:00    [20244514]     Ответить | Цитировать Сообщить модератору
 Re: Конвертирование текстового поля в числовое  [new]
webserver
Member

Откуда:
Сообщений: 3
NickBell
Как я заметила, при конвертировании текстового поля в числовое, выпадает ошибка .
Msg 8114
Msg 8114, Level 16, State 5, Line 1
Error converting data type nvarchar to float.




что вы тепер думаете сейцас без

try_cast 


?

ето для меня интересно
27 фев 17, 22:07    [20248898]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить