SQL Server:仅按月和日匹配日期

时间:2014-04-26 17:26:08

标签: sql sql-server date stored-procedures

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

我没有比较完整的日期,而是想改变它,以便它只比较月和日,以便它适用于任何一年的输入。

示例: 表格中的日期保存为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

非常感谢Mike的任何帮助。

3 个答案:

答案 0 :(得分:8)

你可以这样做;)

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

答案 1 :(得分:2)

试试这个:

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

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

答案 2 :(得分:0)

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

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