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)
- 速度/处理负载是否存在差异?
关于COALESCE
与IFNULL
的有趣回复:***.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() 用于空白(但不是空)字段的主要内容,如果未能解决你的问题,请参考以下文章
处理空值,把 Null 值转换为实际值(coalesce,nvl 函数用法)
Elasticsearch:过滤具有空geo_point值的文档
尽管字段具有“空白=真”,但 Django EmbeddedModelField 在执行 PUT 请求时说“此字段可能不是空白”