CASE WHEN 2 日期匹配的 SQL 查询

Posted

技术标签:

【中文标题】CASE WHEN 2 日期匹配的 SQL 查询【英文标题】:SQL query for CASE WHEN 2 dates match 【发布时间】:2021-07-13 04:00:12 【问题描述】:

SQL 的新手很抱歉,如果这是一个基本问题。 希望创建一个表示两个日期匹配的列(即创建记录的日期与记录过期的日期相同)。

我的两个日期变量是格式为 YYYY-MM-DD HH:MM:SS.SSS 的时间戳

输入示例:

|Created                 | Expiry                  |
|------------------------|-------------------------|
|2021-01-23 12:34:43.123 | 2021-04-18 15:24:17.432 |
|2021-02-19 10:01:01.231 | 2021-02-19 00:00:00.000 |

我的查询是查找两个日期之间的天数,如果等于 0(即两个日期相同),则将 Same_Day 列编码为 1,否则为 0。

SELECT
CASE (WHEN DATEDIFF(dd, CONVERT(VARCHAR(10), Expiry, 102), CONVERT(VARCHAR(10), Created, 102)) = 0 THEN 1 ELSE 0 END) AS Same_Day
FROM database

我正在尝试删除时间并保留日期信息,然后再查找日期之间的天数。

期望的输出

|Created                 | Expiry                  |Same_Day |
|------------------------|-------------------------|---------|
|2021-01-23 12:34:43.123 | 2021-04-18 15:24:17.432 |0        |
|2021-02-19 10:01:01.231 | 2021-02-19 00:00:00.000 |1        |

但是,我收到一条警告消息:关键字 WHEN 附近的语法不正确。请问有什么线索吗?

【问题讨论】:

举几个输入输出的例子 Why should I tag my DBMS 【参考方案1】:

由于您要比较创建和到期时间戳的日期组件,您应该直接这样做,而不使用DATEDIFF

SELECT
    Created,
    Expiry,
    CASE WHEN CONVERT(VARCHAR(10), Expiry, 102) = CONVERT(VARCHAR(10), Created, 102)
         THEN 1 ELSE 0 END AS Same_Day
FROM database;

Demo

DATEDIFF 函数作用于两个 date 输入,而不是两个字符串日期。

【讨论】:

【参考方案2】:

删除 case 后的左括号“(”,并删除 end 后的右括号“)”。 可能会解决错误

【讨论】:

没错,应该是CASE WHEN而不是CASE (WHEN【参考方案3】:

只需改进格式,并删除一些括号。 试试这个:

SELECT
    CASE WHEN DATEDIFF(dd, CONVERT(VARCHAR(10), Expiry, 102), CONVERT(VARCHAR(10), Created, 102)) = 0 
         THEN 1 
         ELSE 0 
    END AS Same_Day
FROM database

【讨论】:

以上是关于CASE WHEN 2 日期匹配的 SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章

SQL查询语句SELECT中带有case when嵌套子查询判断的问题

select case when,用来判断查询

case when用法sql

SQL语句中case,when,then的用法

逗号分隔的结果在 SQL 中使用 SUM(CASE WHEN

sql中case when的使用