SQL 查询 CASE WHEN 2 dates match
SQL query for CASE WHEN 2 dates match
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
附近的语法不正确。请问有什么线索吗?
在 end 之后删除左括号“(”,同时删除右括号)”。
可能会解决错误
只是改进了格式,并删除了一些括号。
试试这个:
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
既然你想比较创建时间戳和过期时间戳的日期部分,你应该直接这样做,而不是使用 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;
DATEDIFF
函数对两个 date 输入进行操作,而不是两个字符串日期。
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
附近的语法不正确。请问有什么线索吗?
在 end 之后删除左括号“(”,同时删除右括号)”。 可能会解决错误
只是改进了格式,并删除了一些括号。 试试这个:
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
既然你想比较创建时间戳和过期时间戳的日期部分,你应该直接这样做,而不是使用 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;
DATEDIFF
函数对两个 date 输入进行操作,而不是两个字符串日期。