【问题标题】:SQL Server: check if selected date is older or newer than current dateSQL Server:检查所选日期是否比当前日期早或晚
【发布时间】:2014-04-27 12:31:48
【问题描述】:

我正在使用以下存储过程选择数据,并将 dateDT 保存为日期时间。

有没有一种方法可以使用 CASE 检查每个选定的日期是否比当前日期旧或新,并为此添加一个短文本(例如“过去”或“未来”)到 Select ?

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')

非常感谢,迈克。

【问题讨论】:

    标签: sql sql-server date datetime stored-procedures


    【解决方案1】:
    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')
    

    【讨论】:

    • 这是完美的 - 非常感谢您的快速帮助!我会尽快接受的。
    【解决方案2】:

    假设字段是日期:

    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')
    

    如果您只是想查看日期组件,而不是时间,并且 dateDTdate 而不是 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 子句中使用时,它会在性能上产生很大的不同。

    【讨论】:

    • 也谢谢你!
    猜你喜欢
    • 1970-01-01
    • 2015-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-30
    相关资源
    最近更新 更多