2011-07-14 104 views
1

我有一个名为logD的表,其字段名为date(日期字段类型)。格式为“年 - 月 - 日”IE:2011-04-11该月的T-SQL选择记录

如果今天的日期是2011-07-31,我想要7月份的所有记录。如果今天的日期是2011年2月14日,我想要2月份的所有记录等等。

我正在使用SQL 2008和报告服务来运行月度报告。

+2

有什么哟你试过了吗?我们在这里帮助解决问题,而不是为你做你的工作。 –

回答

4

试试这个:

SELECT * 
    FROM logD 
WHERE YEAR(DATE) = YEAR(GetDate()) 
    AND MONTH(DATE) = MONTH(GetDate()) 
+1

你可以这样做,所以查询将使用索引 –

3

如果您对列DATE索引,那么你可以试试这个:

SELECT * 
FROM logD 
WHERE [DATE] BETWEEN CONVERT(VARCHAR(6),GETDATE(),112)+'01' AND DATEADD(DAY,-1,DATEADD(MONTH,1,CONVERT(VARCHAR(6),GETDATE(),112)+'01')) 

但是,男人,相貌丑陋...

+1

+1我会建议同样的事情。给自己一个DATEADD并将其改写为'[date]> = {this month} +' - 01'和[date] <{next month} +' - 01'' – Tomalak

+0

@Tomalak - 你绝对是对的 – Lamak

1

试试这个:

DECLARE @firstOfMonth smalldatetime = dateadd(month,datediff(month,0,getdate()),0); 

SELECT * FROM logD 
WHERE [date] > @firstOfMonth 
AND [date] < dateadd(month,1,@firstOfMonth);