在 MSSQL Server 中将 nvarchar 转换为数字

11

我有一个包含多个条目的nvarchar列(包括NULL)-

-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时出错。” 请有人帮忙吗?

编辑您的问题并包含一个简单的查询,以演示问题。 - Gordon Linoff
4个回答

17

您的数据似乎有非有效数值。请使用 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


谢谢您的建议,但那并不起作用。会给出相同的错误信息。 - HM8689
1
@ HM8689,对此我表示怀疑。 TRY_CONVERT 不会生成该错误;如果转换失败,则返回 *NULL*。也许你可以使用你(新的)查询编辑你的帖子? - Thom A
@HM8689,您需要发布实际查询。根据您的查询和执行计划的具体情况,SQL Server可能会在评估TRY_CONVERT之前尝试转换该值。 - Dan Guzman
1
尽管 try_convert 可以在 SQL Server(从 2012 开始)中使用,但是当我尝试使用示例时,出现了错误 Msg 195, Level 15, State 10, Line 2 'TRY_CONVERT' is not a recognized built-in function name.。 示例代码为:SELECT TRY_CONVERT(INT, 'A100.000') AS ValueInt - Mahesh.K
虽然 TRY_PARSETRY_CAST 函数的工作良好 :( - Mahesh.K
显示剩余2条评论

2

如果需要,可以演示Gordon的方法:

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

1
使用 try_convert(numeric(38,5), [ColumnName]) 当无法将字符串转换时,它将返回 NULL。如果可以,它将能够将其转换为数字。

1
您可以在SQLServer中尝试使用转换函数:

convert

select Convert(float, "column_name") from TABLE

空白字段将返回为0。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接