从当天到该月的第一天的两个表中选择日期范围

时间:2012-05-10 00:32:30

标签: sql sql-server-2008 sql-server-2005

使用Microsoft SQL 2008.我想从当前日期到该月的第一天(或同一个月内)选择两个表。假设今天的日期是05/09/2012,日期列是'datecolumn'。从下面的表格中我可以看到表格1中的行集6,7和表格2中的行集9,2,因为这些日期与05/09/2012的月份相同。

table1
4 02/01/2012
5 01/02/2011
6 05/01/2012
7 05/20/2012

table2
8 02/01/2012
9 05/14/2012
3 01/02/2011
2 05/18/2012

我尝试了这个,但它没有用:

DECLARE @daterange
SET @daterange = (DATEPART(MONTH,GETDATE()) + '/' + DATEPART(YEAR,GETDATE()))

SELECT blah from table where (DATEPART(MONTH,datecolumn) + '/' + DATEPART(YEAR,datecolumn)) = @daterange

3 个答案:

答案 0 :(得分:1)

您可以简化它,无需重新构建GETDATE()的日期字段:

SELECT blah
FROM table
WHERE DATEPART(MONTH,datecolumn) = DATEPART(MONTH,getdate()) AND
DATEPART(YEAR,datecolumn) = DATEPART(YEAR,getdate())

答案 1 :(得分:0)

如何确定当前月份的开始和结束,然后选择它们之间的记录:

declare @monthBeginning datetime 
set @monthBeginning = (select dateadd(dd,-(day(dateadd(mm,1,getdate()))-1),dateadd(mm,0,getdate()))

declare @monthEnd datetime
set @monthEnd = (select dateadd(dd, -day(dateadd(m,1,getdate())), dateadd(m,1,getdate())))

select *
from dateTable
where datecolumn between @monthBeginning and @monthEnd

如果您发现自己经常使用月份开始和结束计算,我建议将它们放入标量函数中 - 逻辑很复杂,不想重复它。

答案 2 :(得分:0)

您可以收到当月的第一个:

DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0)

通过在上述结果中添加一个月,您将收到下个月的第一个月:

DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) + 1, 0)

使用这两个日期,您可以检索所需的行:

SELECT
  …
FROM table1
WHERE date >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE())    , 0)
  AND date <  DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) + 1, 0)