【问题标题】:Force COALESE(NULL,NULL) to return NULL强制 COALESE(NULL,NULL) 返回 NULL
【发布时间】:2020-03-23 16:08:37
【问题描述】:

在 SQL 服务器中 考虑到以下事实: Col1 和 Col2 包含数字和 NULL 值

SELECT 
COALESCE(Col1,Col2) 

返回错误:“COALESCE 的至少一个参数必须是不是 NULL 常量的表达式。” 考虑到 Col1 和 Col2 都是 NULL,我想在这种情况下强制它返回 NULL 值。

解决方法对我来说似乎不优雅/效率低下:

SELECT
NULLIF(COALESCE(Col1 ,Col2 ,''),'') 

请注意,Col1 和 Col2 是数字字段,不能将 '' 作为值。

还有什么建议吗?

感谢您的帮助

【问题讨论】:

  • 我迷路了。 coalesce(null, null) 会出现该错误,coalesce(col1, col2) 不会出现该错误:dbfiddle.uk/…
  • @GordonLinoff 谢谢,根据你的例子,它解决了我的问题!
  • 如果Col1Col2 是数字数据类型,那么''(在该表达式中)也不会返回空字符串,它会返回0(因为@ 987654331@ 将被隐式转换为最高优先级的数据类型Col1Col2)。但是''0 都不是NULL
  • 来自 MS Docs:“至少有一个空值必须是 typed NULL。”

标签: sql sql-server tsql


【解决方案1】:

此代码有效:

SELECT COALESCE(Col1, Col2) 
FROM . . .   -- references here that define COL1 and COL2

如果两列都是NULL,它将返回NULL(在您的情况下输入为整数)。

您收到您提到的错误的唯一时间是列是明确 NULL。甚至计算似乎都可以解决这个问题:

select coalesce(null + 3, null)
--> NULL rather than an error

以下甚至返回NULL而不是错误:

declare @col1 int;
declare @col2 int;

select coalesce(@col1, @col2);

Here 是一个 dbfiddle。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多