【问题标题】:Syntax error in sql caused by NULL dataNULL数据导致的sql语法错误
【发布时间】:2013-12-28 02:25:45
【问题描述】:

我有由 NULL 组成的字段数据。我尝试通过将 NULL 数据设为 0.00 来获取 SUM 数据。

我用

从 t 中选择 Sum(cast(ISNULL (amount,0) as money))

这里是demo

如何避免此错误 “无法将 char 值转换为货币。char 值的语法不正确”

【问题讨论】:

  • 为什么会有人将货币存储为字符串?每次你这样做,一只小狗就会死去。

标签: sql sql-server tsql


【解决方案1】:

您的NULL 不是空值,而是一个包含“NULL”字样的字符串:

SQL Fiddle

当您按照演示将其更改为真正的 NULL 时,这将在没有 ISNULL() 的情况下工作,因为聚合忽略 NULL 值:

SELECT SUM(CAST(amount as MONEY)) 
FROM t

如果您需要解决该字符串值,请使用REPLACE() 而不是ISNULL()

SELECT SUM(CAST(REPLACE(amount,'NULL',0) as MONEY)) 
FROM t

最好的做法当然是不将数字存储为字符串,但遗憾的是我们不能总是控制我们获得的数据。

【讨论】:

  • “但遗憾的是,我们不能总是控制我们获得的数据” - 不,但是当你拥有它时,你可以。
【解决方案2】:

在您的演示中,您实际上在最后一条记录中没有空值,您有一个名为“NULL”的字符串。将其更改为实际的空值,它应该可以工作

【讨论】:

    猜你喜欢
    • 2017-04-01
    • 1970-01-01
    • 2019-11-04
    • 2013-07-25
    • 2021-12-25
    • 1970-01-01
    • 2014-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多