如何将nvarchar转换为十进制?

时间:2011-03-30 14:33:40

标签: sql sql-server sql-server-2005 tsql

我知道如何将nvarchar转换为十进制(18,4)Cast方法。我的表行数为80000.我的查询在下面运行完美...


SELECT  top 80000 id, Cast(MH as decimal(18,4)) as MH 
FROM TaskRelations WHERE MH is not null

BUT;

但是下面的选择查询不是WORK!如果写在下面:


SELECT   id, Cast(MH as decimal(18,4)) as MH 
FROM TaskRelations WHERE MH is not null

错误:将数据类型nvarchar转换为数字时出错。  

4 个答案:

答案 0 :(得分:7)

第80,000行后,MH字段中包含非数字数据。

你可以使用ISNUMERIC function,但它是出了名的错误,并会根据你的数据给你很多误报。

答案 1 :(得分:1)

问题通常是确实MH列中的某些nvarchars不能转换为十进制。

您可以尝试直观地检查数据,但由于您有超过80k的记录,这可能是不可行的。尝试以其他方式检查数据 - 您可以使用isNumeric,或在列的第一个(或最后一个)三个字符上使用group by来查找错误数据。

答案 2 :(得分:0)

基本上,您收到的错误是由于超过前80000条记录的某些记录无法转换为小数。检查所有行的数据> 80000

答案 3 :(得分:0)

试试这个:

SELECT   max(MH) as max_mh, min(mh) as min_mh
FROM TaskRelations 
WHERE MH is not null

非数字值应低于或高于数字值。