微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

CASE WHEN 2 个日期匹配的 SQL 查询

如何解决CASE WHEN 2 个日期匹配的 SQL 查询

刚接触 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),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 附近的语法不正确。请问有什么线索吗?

解决方法

由于您想比较创建和到期时间戳的日期组件,您应该直接进行,而不使用 DATEDIFF

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

enter image description here

Demo

DATEDIFF 函数对两个 date 输入进行操作,而不是两个字符串日期。

,

在 case 之后移除左括号 "(" 并在 end 之后移除右括号")"。 可能会解决错误

,

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。