2011-07-21 9 views

答えて

23
SELECT * 
FROM Table 
WHERE GETDATE() >= DATEADD(DAY, -30, GETDATE()) 

代替適切な列名を持つ最初のGETDATE()。

SELECT * 
FROM Table 
WHERE Table.ColumnName >= DATEADD(DAY, -30, GETDATE()) 
+0

月に31日または28日がある場合はどうなりますか?これを一般的にするには? – dexter

+3

@Dexter:申し訳ありません、あなたの質問は30日間:o) –

+1

私はあなたに投票をしましたが、進歩は決して止まらないことを知っています: – dexter

2

これはなんですか?

CREATE PROC GetSomeHistory 

    @NumDaysPrevious int 

    AS 
    BEGIN 
     SELECT * FROM MyTable 
     WHERE RequestDate BETWEEN DATEADD(dd, -1 * @NumDaysPrevious, getdate()) 
          AND getdate(); 
    END 

    ...... 

    EXEC GetSomeHistory 55; 
3

あなたは、最後の30日間または先月をお探しですか? (コメントが言うように「汎用」)を開始し、各月の終わり見つけるには、使用:それをやって

select dateadd(month,datediff(month,0,getdate()),0), 
    dateadd(mm,datediff(mm,-1,getdate()),-1) 
1
SELECT * 
FROM Table 
WHERE myDate >= DATEADD(MONTH, -1, GETDATE()) 

月によっては30日間のブロックでそれを行うよりも異なっています。次のように...これを試しここ

declare @mydate smalldatetime 
set @mydate = '07/6/01' 

select @mydate 
select DATEADD(month, 2, @mydate), DATEDIFF(day, DATEADD(month, 2, @mydate), @mydate) 
select DATEADD(month, 1, @mydate), DATEDIFF(day, DATEADD(month, 1, @mydate), @mydate) 
select DATEADD(month, -1, @mydate), DATEDIFF(day, DATEADD(month, -1, @mydate), @mydate) 
select DATEADD(month, -2, @mydate), DATEDIFF(day, DATEADD(month, -2, @mydate), @mydate) 
select DATEADD(month, -3, @mydate), DATEDIFF(day, DATEADD(month, -3, @mydate), @mydate) 

結果は次のとおりです。日の

2001-07-06 00:00:00 
2001-09-06 00:00:00 | -62 
2001-08-06 00:00:00 | -31 
2001-06-06 00:00:00 | 30 
2001-06-06 00:00:00 | 30 
2001-05-06 00:00:00 | 61 
2001-04-06 00:00:00 | 91 
関連する問題