Преобразование nvarchar в numeric на сервере MSSQL

У меня есть столбец nvarchar со списком записей, таких как (включая нули) -

-1.00000
0.000000
0.010000
0.100000
0.500000
00000000
1.000000
1.500000
10.00000
10.50000
100.0000
1000.000
1001.000
1006.000
NULL
NULL

Я хочу преобразовать это в числовое поле, чтобы я мог использовать это поле для некоторых вычислений. Тем не менее, я получаю следующее сообщение об ошибке-

ошибка преобразования типа данных nvarchar в float.

может кто-нибудь помочь?

3 ответов


ваши данные будут иметь значения, которые не являются допустимыми числовыми значениями. Использовать try_convert():

select try_convert(numeric(38, 12), col)

возвращает NULL Если есть сбой в преобразовании.

вы можете найти значения, которые не удается преобразование делать:

select col
from t
where try_convert(numeric(38, 12), col) is null and col is not null;

вам нужно использовать try_convert() везде, где вы ссылаетесь на столбец как на числовой. Преобразование в select относится только к select.


просто чтобы продемонстрировать метод Гордона в случае необходимости OP:

create table #test(val nvarchar(100));

insert into #test values
('-1.00000'),
('0.000000'),
('0.010000'),
('0.100000'),
('0.500000'),
('00000000'),
('1.000000'),
('1.500000'),
('10.00000'),
('10.50000'),
('100.0000'),
('1000.000'),
('1001.000'),
('1006.000'),
(NULL),
(NULL)

select val, TRY_CONVERT(numeric(38,12),val) as converted_val from #test

использовать try_convert(numeric(38,5), [ColumnName])

это вернет NULL, если он не может преобразовать строку. Если это возможно, он сможет преобразовать его в числовое число