我想创建一个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)
感谢您提供的任何帮助
答案 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