获取当月的日期范围?

时间:2011-08-24 14:20:51

标签: sql sql-server delphi delphi-7

我想创建一个SQL语句,稍后在我的代码中使用,获取当前月份的日期范围。

示例:这是八月,所以日期范围是

StartDate = 08/01/11
EndDate = 08/31/11
但是,如果是2月份

StartDate = 02/01/11
EndDate = 02/28/11

Select * 
from mytable 
where (check_date >= StartDate) AND (check_date <= EndDate)

感谢您提供的任何帮助

4 个答案:

答案 0 :(得分:11)

你可以找到本月的开头,以及从零开始的诀窍。这个月的最后一天是一个月后,减去一天:

select  dateadd(month,datediff(month,0,getdate()),0)
,       dateadd(day,-1,dateadd(month,datediff(month,-1,getdate()),0))

打印:

1-aug-2011    31-aug-2011

答案 1 :(得分:1)

我需要非常类似的东西,从特定日期获得月份的日期范围,这可能在SQL搜索中使用 - 这意味着不仅日期必须正确,而且时间必须从00:00:00到23:59 :如果在24小时制中,59只是显示DATETIME格式的问题,它也适用于12小时制。

也许这对某人有用。该解决方案基于Andomar的答案:

-- Parameter date, which must be given to this code
DECLARE @date DATETIME
SET @date = GETDATE() -- for testing purposes initializing some date

-- Declare @from and to date range variables
DECLARE @from DATETIME
DECLARE @to DATETIME

-- This code line is based on Andomar's answer
SET @from = DATEADD(month,DATEDIFF(month, 0, @date),0) 

-- Just simply to variable @from adds 1 month, minus 1 second
SET @to = DATEADD(second, -1, DATEADD(month, 1, @date))

-- Result
SELECT @from, @to

您将获得 2012.01.01 00:00:00 - 2012.01.31 23:59:59 的结果。

答案 2 :(得分:0)

如果您需要月份范围仅用于检查“check_date”是否属于特定月份,您可以使用类似

的条件
month(Check_date) = @Month and year(Check_date) = @Year

答案 3 :(得分:0)

您可以创建一个返回给定日期的结束日期的函数。

所以你可以传递开始日期的功能,就像这样

WHEN(MONTH(@date) IN (1, 3, 5, 7, 8, 10, 12)) THEN 31
WHEN(MONTH(@date) IN (4, 6, 9, 11)) THEN 30
ELSE 
    CASE 
       WHEN (YEAR(@date) % 4 = 0
       AND YEAR(@date) % 100 != 0)
       OR (YEAR(@date) % 400  = 0)
       THEN 29
        ELSE 28
END