SQL 选择较早的日期(包括 NULL)

Posted

技术标签:

【中文标题】SQL 选择较早的日期(包括 NULL)【英文标题】:SQL select earlier date (including NULL) 【发布时间】:2021-03-11 00:09:18 【问题描述】:

我正在尝试从两个给定的列中选择较早的日期/时间。但是,如果两列之一具有空值,我会遇到问题。

我的想法是 选择 dateTime1

但是,无论我如何更改更大或更小的符号,使用上述方法将始终返回空值。

【问题讨论】:

包含最小的代表性数据集。还包括 SQL 实现作为标记。根据标准 SQL 规则,如果 任一值 为 NULL,dateTime1 < datetime2始终不为真。当其中一列 is NULL 时结果应该是什么(这就是为什么包含的代表性数据很有帮助)? 也就是说,这其中任何一个都可以工作:case when dateTime1 is null or dateTime1 < dateTime2 then column1 else column 2 end,甚至:case when isnull(dateTime1, '17530101') < isnull(dateTime2, '17530101') then column1 else column2 end(在 SQL Server 中工作正常;使用 isnull 而不是标准 COALESCE 来显示这一点并利用 SQL Server 的isnull 类型规则)。 如果其他结果集为空,则应选择其他列中的日期。 【参考方案1】:

你可以拥有:

Select Case When Column1 is null then Column2 when Column2 is Null then Column1 When Column1 > Column2 Then Column2 When Column1 < Column2 Then Column1 End As EarlierDate From TableName

【讨论】:

以上是关于SQL 选择较早的日期(包括 NULL)的主要内容,如果未能解决你的问题,请参考以下文章

如何获取我的 SQL/Vertica 表中每个日期的上个月数据

从较早的行累积数组(PySpark 数据框)

PostgreSQL:如何将大写/小写视为重复项,而不是更改大小写并保留较早的条目?

如何使用同一组中下一行的数据更新前一条记录

今天和更早的日期之间的SQL

按较早日期验证两个日期时间本地字段?