【问题标题】:how to cast nvarchar to decimal?如何将 nvarchar 转换为十进制?
【发布时间】:2011-03-30 14:33:39
【问题描述】:

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


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

但是;

但下面的选择查询不起作用!如果写在下面:


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

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

【问题讨论】:

  • 那是因为不可能投射出不在前 80000 行中的 MH 记录之一。 MH 数据类型是什么?

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


【解决方案1】:

您的 MH 字段在第 80,000 行之后有非数字数据。

您可以使用ISNUMERIC function,但它出了名的错误,并且会根据您的数据给您带来大量误报。

【讨论】:

  • @programmerist - 这个数字是基于什么的?您在原始帖子中的查询和您的错误代码另有说明。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      试试这个:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-13
        • 2013-10-08
        • 1970-01-01
        • 2013-10-30
        • 1970-01-01
        相关资源
        最近更新 更多