为什么我不能将此varchar转换为数字?

时间:2017-08-09 15:42:31

标签: sql sql-server-2008 tsql sql-server-2008-r2 linqpad

我有一个粘贴了值的表,但它们最初以varchar开头。我需要将它们转换为数字,所以我做了

convert(decimal(10,3), cw.col7)

但这会回归Error 8114: Error converting data type varchar to numeric。我提出这个问题的原因是因为它没有为类似的数据集提供此错误。使用convert()decimal()时,有时会出现奇怪的异常吗?或者我应该先转换为浮动?

数据:

col7

490.440 
2 
934 
28,108.000 
33,226.000 
17,347.000 
1,561.000 
57 
0 
421.350 
64 
1,100.000 
0 
0 
3,584 
202.432 
0 
3,280 
672.109 
1,150 
0 
104 
411.032 
18,016 
40 
510,648 
443,934.000 
18,705 
322,254 
301 
9,217 
18,075 
16,100 
395 
706,269 
418,313 
7,170 
40,450 
2,423 
1,300 
2,311 
94,000.000 
17,463 
0 
228 
884 
557 
153 
13 
0 
0 
212.878 
45,000.000 
152 
24,400 
3,675 
11,750 
987 
23,725 
268,071 
4,520.835 
286,000 
112,912.480 
9,000 
1,316 
1,020 
215,244 
123,967 
6,911 
1,088.750 
138,644 
16,924 
7,848 
33,017 
464,463 
618 
72,391 
9,367 
507,635.950 
588,087 
92,890 
17,266 
0 
1,414,547 
89,080 
664 
101,635 
1,552,992 
175 
356 
7,000 
0 
0 
445 
507,381 
24,016 
469,983 
0 
0 
147,737 
3,521 
88,210 
18,433.000 
21,775 
3,607 
34,774 
7,642 
42,680 
1,255 
10,880 
350,409.800 
19,394.520 
2,476,257.400 
778.480 
1,670.440 
9,710 
24,931.600 
3,381.800 
2,900 
18,000 
4,121 
3,750 
62,200 
952 
29.935 
17.795 
11.940 
902 
36,303 
1,240 
1,020 
617 
817 
620 
92,648 
70,925 
82,924 
19,162.200 
1,213.720 
2,871 
3,180 
91,600 
645 
607 
155,100 
6 
840 
1,395 
112 
6,721 
3,850 
40 
4,032 
5,912 
1,040 
872 
56 
1,856 
179 

3 个答案:

答案 0 :(得分:3)

Try_Convert(money,...)将处理逗号,而decimal(10,3)将返回null

示例

Select col7
      ,AsMoney   = Try_Convert(money,col7)
      ,AsDecimal = Try_Convert(decimal(10, 3),col7)
 from YourTable

<强>返回

enter image description here

答案 1 :(得分:1)

尝试使用强制转换并删除逗号

 SELECT CAST(repalce(cw.col7,',','') AS DECIMAL(10,3))
 from your_table

并且根据Jhon Cappelleti的建议,你需要更多的3位小数,所以你应该使用

 SELECT CAST(repalce(cw.col7,',','') AS DECIMAL(12,4))
 from your_table

答案 2 :(得分:0)

运行此查询:

select cw.col7
from cw
where try_convert(decimal(10, 3), cw.col7) is null;

这将显示未成功转换的值。 (如果cw.col7可以是NULL,那么请添加and cw.col7 is not null以使输出更有意义。)