簡體   English   中英

如何檢查月/日日期范圍

[英]How to check Month/day date range

DECLARE @SEASONSTARTDATE date = '1900-03-26'
DECLARE @SEASONENDDATE date = '1900-12-31'

使用上述數據,如何檢查其是否在當前的MONTH和DAY范圍內。

例如,今天的日期是2014-04-25(無關緊要的年份),這意味着以上數據在3/26和12/31之內有效。

編輯:

declare @SOMEDATA TABLE(
    SEASON_START_DATE datetime,
    SEASON_END_DATE datetime
)

INSERT INTO @SOMEDATA
VALUES ('1900-03-26','1900-12-31')

SELECT * FROM @SOMEDATA
WHERE DATEPART(MONTH,GETDATE()) BETWEEN DATEPART(MONTH,SEASON_START_DATE) AND DATEPART(MONTH,SEASON_END_DATE)
AND DATEPART(DAY,GETDATE()) BETWEEN DATEPART(DAY,SEASON_START_DATE) AND DATEPART(DAY,SEASON_END_DATE)

以上應該給我返回結果,因為當前日期在3/26到12/31的有效范圍內。

上面的方法無效,因為我先將日期細分為月份,然后比較了要在范圍內的月份,然后對日期進行了同樣的操作,如何做到這一點,以便將月份和日期與當前月份/查看當前月/日是否在范圍內?

DATEPART返回整數。 使用> =和<=代替BETWEEN。 看看是否有幫助。

另外,似乎您在那里有邏輯上的問題。
對於結束日期,您只檢查DAY,
對於開始日期,您僅檢查MONTH。

對我來說這似乎是錯誤的。

嘗試這個:

DECLARE @DT datetime

SET @DT = getdate()
DECLARE @m1 int
SET @m1 = DATEPART(MONTH, SEASON_START_DATE)
DECLARE @m2 int
SET @m2 = DATEPART(MONTH, SEASON_END_DATE)
IF (@m2 < @m1) 
   BEGIN
        SET @m2 = @m2 + 12

        DECLARE @m int
        SET @m = DATEPART(MONTH, @DT)
        IF (@m >= 1 and @m <= @m2) BEGIN SET @m = @m + 12 END
   END


SELECT * FROM @SOMEDATA
WHERE 
@m * 100 + DATEPART(DAY,@dt) >= 
    @m1 * 100 + DATEPART(DAY,SEASON_START_DATE)
AND
@m * 100 + DATEPART(DAY,@dt) <=  
    @m2 * 100 + DATEPART(DAY,SEASON_END_DATE)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM