使用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
答案 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)