3

使用 Microsoft SQL 2008。我有两个表要从当前日期到该月的第一天(或同一个月内)选择。假设今天的日期是 05/09/2012,日期列是“datecolumn”。从下表中,我应该只从表 1 中获取行集 6,7,从表 2 中获取行集 9,2,因为这些日期与 2012 年 5 月 9 日在同一个月内。

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
4

3 回答 3

1

您可以简化它,无需从以下位置重构日期字段GETDATE()

SELECT blah
FROM table
WHERE DATEPART(MONTH,datecolumn) = DATEPART(MONTH,getdate()) AND
DATEPART(YEAR,datecolumn) = DATEPART(YEAR,getdate())
于 2012-05-10T00:36:18.033 回答
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

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

于 2012-05-10T00:41:37.447 回答
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)
于 2012-05-10T00:43:33.990 回答