DECLARE @SEASONSTARTDATE date = '1900-03-26'
DECLARE @SEASONENDDATE date = '1900-12-31'
使用Above数据,如何检查它是否在当前的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。
以上内容无效是因为我先将日期分为月份,并将月份与范围进行比较,然后对日期进行了相同的处理,如何进行,以便将月份与日期进行比较当前月/日查看当前月/日是否在范围内?
答案 0 :(得分:1)
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)