[英]SQL Server: check if selected date is older or newer than current date
我正在使用以下存储过程选择数据,其中dateDT被保存为datetime。
有没有一种方法可以使用CASE来检查每个选定日期是否早于或晚于当前日期,并为此向Select添加一个短文本(例如“ past”或“ future”)?
SELECT dateID,
CONVERT(VARCHAR(11), dateDT, 106) AS dateDT,
CONVERT(VARCHAR(10), dateDT, 126) AS dateDTShort,
countries,
regions
FROM DaysFixed
WHERE countries LIKE '%'+@selCountry+'%'
OR regions LIKE '%'+@selCountry+'%'
ORDER BY dateID
FOR XML PATH('datesDT'), ELEMENTS, TYPE, ROOT('root')
谢谢你,迈克。
SELECT dateID,
CONVERT(VARCHAR(11), dateDT, 106) AS dateDT,
CASE WHEN CONVERT(VARCHAR(11), dateDT, 106) > GETDATE() THEN 'Future'
ELSE 'Past' END AS FutureOrPast,
CONVERT(VARCHAR(10), dateDT, 126) AS dateDTShort,
countries,
regions
FROM DaysFixed
WHERE countries LIKE '%'+@selCountry+'%'
OR regions LIKE '%'+@selCountry+'%'
ORDER BY dateID
FOR XML PATH('datesDT'), ELEMENTS, TYPE, ROOT('root')
假设该字段是一个日期:
SELECT dateID,
CONVERT(VARCHAR(11), dateDT, 106) AS dateDT,
CONVERT(VARCHAR(10), dateDT, 126) AS dateDTShort,
(CASE WHEN dateDT < GETDATE() then 'PAST' else 'FUTURE' end) as TimeWhen,
countries,
regions
FROM DaysFixed
WHERE countries LIKE '%'+@selCountry+'%'
OR regions LIKE '%'+@selCountry+'%'
ORDER BY dateID
FOR XML PATH('datesDT'), ELEMENTS, TYPE, ROOT('root')
如果您只想查看日期组件,而不是时间,并且dateDT
是date
而不是datetime
:
(CASE WHEN dateDT < cast(GETDATE() as date) THEN 'PAST'
WHEN dateDT = cast(GETDATE() as date) then 'PRESENT'
WHEN dateDT > cast(GETDATE() as date) THEN 'FUTURE'
END) as TimeWhen
请注意,在这些示例中,没有函数应用于dateDT
列。 这是一个很好的习惯,尽管对case
陈述没有影响。 但是,当在where
子句中使用时,它可以在性能上产生很大的不同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.