【问题标题】:SQL Server: compare dates by only matching month and daySQL Server:仅通过匹配月份和日期来比较日期
【发布时间】:2014-04-26 17:26:08
【问题描述】:

我有一个存储过程,它根据与日期输入匹配的日期来获取记录,到目前为止效果很好。 表中的日期和我的输入日期都被格式化为日期时间。

我不想比较完整的日期,而是想将其更改为仅比较月份和日期,以便它适用于输入的任何年份。

示例: 表中的日期保存为2013-04-30,我输入的日期为2014-04-30。 我想要的是,只要月份和日期匹配,存储过程仍然会返回独立于年份的记录。

我的存储过程:

ALTER PROCEDURE [dbo].[FetchDays]
    @inputDate datetime
AS
BEGIN
    SET NOCOUNT ON;
    SELECT      dateID,
                dayDT,
                countries,
                regions
    FROM        DaysDT
    WHERE       dayDT = @inputDate
    FOR XML PATH('daysFixed'), ELEMENTS, TYPE, ROOT('root')

END

非常感谢您提供的任何帮助,迈克。

【问题讨论】:

    标签: sql sql-server date stored-procedures


    【解决方案1】:

    你可以这样做;)

    ALTER PROCEDURE [dbo].[FetchDays]
        @inputDate datetime
    AS
    BEGIN
        SET NOCOUNT ON;
        SELECT      dateID,
                    dayDT,
                    countries,
                    regions
        FROM        DaysDT
        WHERE       
            DAY(dayDT) = DAY(@inputDate) --Extract and compare day
            AND MONTH(dayDT) = MONTH(@inputDate) --Extract and compare month
        FOR XML PATH('daysFixed'), ELEMENTS, TYPE, ROOT('root')
    
    END
    

    【讨论】:

    • 非常感谢,这太完美了!会尽快接受。 :)
    【解决方案2】:

    试试这个:

    WHERE datepart(day, dayDT) = datepart(day,@inputDate)
    AND datepart(month, dayDT) = datepart(month,@inputDate)
    

    这将比较整个日期的日期和月份部分,而不检查年份。

    【讨论】:

    • 谢谢,就是这样 - 另一个帖子快了几秒钟。
    • 别担心,重要的是您要感谢谁花时间提供帮助,并且给出的答案对于有类似问题的其他人来说将是一个很好的资源。
    【解决方案3】:

    我过去一直需要这种类型的要求。我已经使用了这个解决方案,它对我有用。

    SELECT * FROM yourTableName
    WHERE DATE_FORMAT(yourColumnName, '%m-%d') = DATE_FORMAT('yourValue', '%m-%d') and yourOtherCondition;
    

    【讨论】:

    • 对 SQL 服务器进行了一些调整,这个答案对我有用 +1 WHERE FORMAT([birthday], 'dd-MM') = FORMAT(CAST(GETDATE() as date), 'dd-MM')
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-02
    • 1970-01-01
    • 1970-01-01
    • 2011-09-11
    • 1970-01-01
    相关资源
    最近更新 更多