获取特定月份的所有记录 - 构建SQL查询

Muh*_*tar 0 sql sql-server asp.net sql-server-2005

我需要一些帮助来构建SQL Query.我的表有以下数据:

ID  Date        Name
1   1/1/2009    a
2   1/2/2009    b
3   1/3/2009    c
Run Code Online (Sandbox Code Playgroud)

我需要得到类似......的结果

1    1/1/2009    a
2   1/2/2009    b
3   1/3/2009    c
4   1/4/2009    Null
5   1/5/2009    Null
6   1/6/2009    Null
7   1/7/2009    Null
8   1/8/2009    Null
............................
............................
............................
30  1/30/2009   Null
31  1/31/2009   Null
Run Code Online (Sandbox Code Playgroud)

我想查询像...

Select * from tbl **where month(Date)=1 AND year(Date)=2010**
Run Code Online (Sandbox Code Playgroud)

以上未完成查询.

我需要获得特定月份的所有记录,即使有些日期丢失了.

我想必须有equi加入查询,我正在尝试使用Equi join构建此查询

谢谢

Pau*_*lor 5

大编辑

现在了解OP的问题.

使用公用表表达式和左连接来获得此效果.

DECLARE @FirstDay DATETIME;

-- Set start time
SELECT @FirstDay = '2009-01-01';

WITH Days AS 
(
  SELECT @FirstDay as CalendarDay
  UNION ALL
  SELECT DATEADD(d, 1, CalendarDay) as CalendarDay
  FROM Days
  WHERE DATEADD(d, 1, CalendarDay) < DATEADD(m, 1, @FirstDay)
)
SELECT DATEPART(d,d.CalendarDay), **t.date should be (d.CalendarDay)**, t.Name  FROM Days d
LEFT JOIN tbl t
ON
  d.CalendarDay = t.Date
ORDER BY 
  d.CalendarDay;
Run Code Online (Sandbox Code Playgroud)

将这个原始答案留在底部

你需要DATEPART,先生.

SELECT * FROM tbl WHERE DATEPART(m,Date) = 1
Run Code Online (Sandbox Code Playgroud)

如果您想选择月份和年份,那么您可以使用DATEPART两次或去一个范围.

SELECT * FROM tbl WHERE DATEPART(m,Date) = 1 AND DATEPART(yyyy,Date) = 2009
Run Code Online (Sandbox Code Playgroud)

范围 :-

SELECT * FROM tbl WHERE Date >= '2009-01-01' AND Date < '2009-02-01'
Run Code Online (Sandbox Code Playgroud)

有关DATEPART的更多信息,请参阅此链接.

http://msdn.microsoft.com/en-us/library/ms174420.aspx