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