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构建此查询
谢谢
大编辑
现在了解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
| 归档时间: |
|
| 查看次数: |
15594 次 |
| 最近记录: |