带有SQL绝对函数的NULL

带有SQL绝对函数的NULL,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,上面的SQL代码抛出一个错误。我想检查空值,但如果不是空值,则应为正值。不要将字符串传递给ABS()——这是一个数值函数。如果希望0为NULL显示: ABS(ISNULL(Convert(varchar,DATEDIFF(day, Emp.Date1 , Emp.Date)),'')) 注: 已删除对字符串的转换 将''更改为0。你可以选择任何你喜欢的价值 我更喜欢COALESCE()而不是ISNULL(),因为前者是ANSI标准。在SQL Server中使用ISNULL()有时有很好的理由

上面的SQL代码抛出一个错误。我想检查空值,但如果不是空值,则应为正值。

不要将字符串传递给
ABS()
——这是一个数值函数。如果希望
0
NULL
显示:

ABS(ISNULL(Convert(varchar,DATEDIFF(day, Emp.Date1 , Emp.Date)),''))
注:

  • 已删除对字符串的转换
  • ''
    更改为
    0
    。你可以选择任何你喜欢的价值
  • 我更喜欢
    COALESCE()
    而不是
    ISNULL()
    ,因为前者是ANSI标准。在SQL Server中使用
    ISNULL()
    有时有很好的理由
注意:请勿在SQL Server中使用没有长度的
varchar()
。默认值因上下文而异,不明确可能导致很难找到错误。但是,对于需要数字的函数,也不要转换为字符串

编辑:

对于空字符串,将
coalesce()
放在外部:

ABS(COALESCE(DATEDIFF(day, Emp.Date1 , Emp.Date), 0))

我没想到那是你的初衷。应该是显而易见的。

您的语法非常清楚SQL Server,因此我正在删除无关的数据库标记。请查看。您的问题可以通过包含准确的错误消息来改进。感谢gordon,bulls eye,sql新手,关于将其返回emty Strings的任何帮助当它恰好为零时,不能打印零。
COALESCE(ABS(DATEDIFF(day, Emp.Date1, Emp.Date)), '')