仅在不为空时比较字段

Posted

技术标签:

【中文标题】仅在不为空时比较字段【英文标题】:Comparing fields only when NOT null 【发布时间】:2015-01-13 12:41:21 【问题描述】:

我有一个这样的查询。

SELECT T1.timestamp, T2.timestamp FROM (SELECT …) AS T1 LEFT OUTER JOIN (SELECT ….) AS T2 ON T1.id = T2.id WHERE T1.timestamp < T2.timestamp

我面临的问题是条件WHERE T1.timestamp < T2.timestamp 将过滤掉 T1.timestamp

在我的用例中,我不希望查询过滤掉 T2.timestamp 为空的行。 T1.timestamp < T2.timestamp 应该只在定义了两个时间戳的情况下进行比较,并且应该返回 T2.timestamp 为空的行。

有没有办法做到这一点?

【问题讨论】:

WHERE T1.timestamp < T2.timestamp OR T2.timestamp IS NULL 不适合你吗? 我试过了,效果很好。非常感谢!!! WHERE T1.timestamp 【参考方案1】:

复制 N.N.在这里回答,这样问题就不会显示为 0 个答案:

WHERE T1.timestamp<= ifnull(T2.timestamp,T1.timestamp) 

而 Pentium10 回答:

WHERE T1.timestamp < T2.timestamp OR T2.timestamp IS NULL

(如果 N.N. 或 Pentium10 将他们的 cmets 移至答案,我将删除此答案)

【讨论】:

以上是关于仅在不为空时比较字段的主要内容,如果未能解决你的问题,请参考以下文章

Bigquery 仅在不为空时选择列

在 Java8 中使用 lambda 仅在不为空时过滤值

Laravel 验证仅在字段不为空时验证正则表达式

仅在选中且不为空时才显示元素

VBScript 仅在文件不为空时附加文件

如果确认字段不为空,MVC 比较电子邮件