COALESCE() 用于空白(但不是空)字段

Posted

技术标签:

【中文标题】COALESCE() 用于空白(但不是空)字段【英文标题】:COALESCE() for blank (but not null) fields 【发布时间】:2012-10-25 12:13:48 【问题描述】:

我有两个字段要与 mysql 的函数 COALESCE() 进行比较。例如,COALESCE(Field1, Field2)。问题是,Field1 有时为空但不为空;因为它不是 null COALESCE() 选择 Field1,即使它是空白的。在这种情况下,我需要它来选择 Field2。

我知道我可以在查询中编写 if-then-else (CASE) 语句来检查这一点,但是对于空白但非空字段是否有一个很好的简单函数,例如 COALESCE()

【问题讨论】:

【参考方案1】:
SELECT IFNULL(NULLIF(Field1,''),Field2)

如果 Field1 为空,则 NULLIF 返回 NULL,而如果 Field1 不为空或 NULL,则 IFNULL 返回 Field1,否则返回 Field2。

【讨论】:

我也可以这样做,但使用 COALESCE 是否正确? COALESCE(NULLIF(Field1,''),Field2) - 速度/处理负载是否存在差异? 关于COALESCEIFNULL 的有趣回复:***.com/questions/4747877/…【参考方案2】:

我知道我在这里聚会迟到了,但是有一种方法可以在仍然使用 COALESCE() 的同时做到这一点。如果您的值为 NULL 或 '',这将起作用。

Select COALESCE(NULLIF(Field1,''), Field2)

【讨论】:

查看所选答案的评论 :) 好了!没看到。【参考方案3】:

您可以使用CASE 表达式:

CASE WHEN Field1 <> '' THEN Field1 ELSE Field2 END

【讨论】:

这就是我所说的 if-then-else;我正在寻找一种更清洁的单线解决方案【参考方案4】:

使用 CASE,比较 NULL 和 Blank。

SELECT CASE 
        WHEN Field1 IS NULL
            OR LEN(LTRIM(RTRIM(Field1))) < 1
            THEN Field2
        ELSE Field1
        END;

为了比较空白,不要使用'',使用LEN、LTRIM、RTRIM。有时,空白可能包含多个空格。

【讨论】:

以上是关于COALESCE() 用于空白(但不是空)字段的主要内容,如果未能解决你的问题,请参考以下文章

获取两个字段中不为空的那个字段 ---SQL

处理空值,把 Null 值转换为实际值(coalesce,nvl 函数用法)

Elasticsearch:过滤具有空geo_point值的文档

尽管字段具有“空白=真”,但 Django EmbeddedModelField 在执行 PUT 请求时说“此字段可能不是空白”

jquery:如何在提交之前从表单中删除空白字段?

mysql几个常用的判空函数:isnull, ifnull, nullif, coalesce