来自不同列的 SQL datediff

Posted

技术标签:

【中文标题】来自不同列的 SQL datediff【英文标题】:SQL datediff from different columns 【发布时间】:2021-11-29 08:22:14 【问题描述】:

我有一个表,在一个字段或另一个字段(取决于另一个变量)中有一个操作日期(我们称之为 X),问题是我需要获取“X”发生的日期,所以我需要一个值为 column1 或 column2 的新列,具体取决于日期所在的位置。

我对此非常熟悉,所以我一直在尝试不同的东西,现在使用 CASE。

我得到了以下信息,但我在新列“DATE_X_FINAL”中得到的所有值都是 NULL。

尽管我需要一个新列,但我现在尝试使用 select 只是为了看看我是否可以让它工作。

有什么想法吗?

SELECT [Date_X], [Date_X2], 
       CASE 
       WHEN [Date_X] = NULL THEN [Date_X2]
       END as DATE_X_FINAL
    FROM [DATABASE.TABLE] 

结果:

[Date_X]    [Date_X2]   DATE_X_FINAL
2020-12-23   NULL       NULL
2019-02-05   NULL       NULL
2019-02-13   NULL       NULL
2019-02-12   NULL       NULL
2019-02-06   NULL       NULL

【问题讨论】:

您使用的是哪个 dbms?说到日期/时间,很多产品都有自己的功能。 【参考方案1】:

In SQL null is not equal (=) to anything—not even to another null.

您使用IS NULL 测试空比较。

在标准 (ANSI) SQL - COALESCE 中有一个内置的便利函数来执行此操作。 (“COALESCE() 函数返回列表中的第一个非空值。”)

SELECT Date_X, Date_X2
     , COALESCE(Date_X, Date_X2) AS 'DATE_X_FINAL' 
FROM DATABASE.TABLE

【讨论】:

艾伦,你知道你是摇滚明星,对吧?这绝对优雅地解决了我的问题。

以上是关于来自不同列的 SQL datediff的主要内容,如果未能解决你的问题,请参考以下文章

SQL 最大值但也显示来自其他列的值

通过连接来自不同列的逗号分隔值来创建字符串

在 Teradata SQL 中查找给定列的哪些行具有不同的值

来自一列的 SQL UPDATE 数据与来自另一列的匹配

来自表列的sql全文搜索关键字

跨多个表的列的 SQL 唯一约束