案例表达式 - 比较日期
Case expression - comparing dates
我正在使用下面的查询,如果截止日期列 (eh.Deadline) < 今天 (getdate) 那么 returns 1,否则 0。
(case when he.Deadline < CONVERT(VARCHAR(10),GETDATE(),111) then 1 else 0 end) Deadline
一切正常,但我需要更改它以便只比较月份和年份(而不是日期)。
例如,如果截止日期=10/01/2022 并且今天=11/01/2022
- 我的查询 returns 1 (10/01/2022 < 11/01/2022)
- 我只想比较月份和年份 - 我希望它为 return 0,因为 MM/YYYY 相同 (01/2022 = 01/2022)
编辑:
列 he.Deadline 具有以下格式:DD/MM/YYYY HH/MM 这无法与 GETDATE 进行比较并解决我必须使用 CONVERT(VARCHAR(10 ),GETDATE(),111) 而不是 GETDATE
以上查询用于我创建的仪表板,我不想更改数据库中的任何内容。
我只想比较 MM/YYYY 而不是 DD/MM/YYYY
有什么想法吗?
非常感谢!
首先你需要确保你比较的是 datetime/date 和 datetime/date 不是带日期时间的字符串,也不是带字符串的字符串,因为比较是不同的,而且你的期望的结果是比较日期。
那么您应该将数据存储在正确的数据类型中,对于日期时间来说是 datetime2
。将您的 Deadline
存储为字符串会给您带来项目生命周期中的痛苦和麻烦,并且性能会很差。
但是在这种情况下,您需要首先将 Deadline
列正确转换为日期值,然后解决实际问题的一种方法是与当前的第一个进行比较月份如下:
select
-- Convert to a date datatype in order to be able to correctly compare to another date
convert(date,substring(he.Deadline,1,10),103) -- Ensure dd/mm/yyyy as opposed to mm/dd/yyyy
<
-- Calculate the first of the month and check whether the Deadline is before then
convert(date,dateadd(day, -1*(datepart(day,getdate())-1), getdate())) then 1 else 0 end Deadline
from (
values ('10/01/2022 12/30')
) he (Deadline)
你可以(case when EOMONTH(he.Deadline) < EOMONTH(GETDATE()) then 1 else 0 end) Deadline
在比较它们之前将两个值的日期设置为该月的最后一天,因此最后只有 month/year 重要
编辑:只要 Deadline
是 date
... 如果不是,则必须在调用 EOMONTH
之前将其转换为 date
它
我正在使用下面的查询,如果截止日期列 (eh.Deadline) < 今天 (getdate) 那么 returns 1,否则 0。
(case when he.Deadline < CONVERT(VARCHAR(10),GETDATE(),111) then 1 else 0 end) Deadline
一切正常,但我需要更改它以便只比较月份和年份(而不是日期)。
例如,如果截止日期=10/01/2022 并且今天=11/01/2022
- 我的查询 returns 1 (10/01/2022 < 11/01/2022)
- 我只想比较月份和年份 - 我希望它为 return 0,因为 MM/YYYY 相同 (01/2022 = 01/2022)
编辑:
列 he.Deadline 具有以下格式:DD/MM/YYYY HH/MM 这无法与 GETDATE 进行比较并解决我必须使用 CONVERT(VARCHAR(10 ),GETDATE(),111) 而不是 GETDATE
以上查询用于我创建的仪表板,我不想更改数据库中的任何内容。
我只想比较 MM/YYYY 而不是 DD/MM/YYYY
有什么想法吗?
非常感谢!
首先你需要确保你比较的是 datetime/date 和 datetime/date 不是带日期时间的字符串,也不是带字符串的字符串,因为比较是不同的,而且你的期望的结果是比较日期。
那么您应该将数据存储在正确的数据类型中,对于日期时间来说是 datetime2
。将您的 Deadline
存储为字符串会给您带来项目生命周期中的痛苦和麻烦,并且性能会很差。
但是在这种情况下,您需要首先将 Deadline
列正确转换为日期值,然后解决实际问题的一种方法是与当前的第一个进行比较月份如下:
select
-- Convert to a date datatype in order to be able to correctly compare to another date
convert(date,substring(he.Deadline,1,10),103) -- Ensure dd/mm/yyyy as opposed to mm/dd/yyyy
<
-- Calculate the first of the month and check whether the Deadline is before then
convert(date,dateadd(day, -1*(datepart(day,getdate())-1), getdate())) then 1 else 0 end Deadline
from (
values ('10/01/2022 12/30')
) he (Deadline)
你可以(case when EOMONTH(he.Deadline) < EOMONTH(GETDATE()) then 1 else 0 end) Deadline
在比较它们之前将两个值的日期设置为该月的最后一天,因此最后只有 month/year 重要
编辑:只要 Deadline
是 date
... 如果不是,则必须在调用 EOMONTH
之前将其转换为 date
它