2011-10-27 18 views
1

私はテーブルに2つのdatetimeカラムを持っていますが、最初のカラムから2番目のカラムまでの差が1ヵ月の1秒に満たない行を正確に選択したいと思います。例えば、それは2011年に日時のこれらの行(なしその他)を選択します:2ヶ月間のSQL where節は、ちょうど1ヶ月から1秒離れていますか?

col1    col2 
2011-01-01 00:00:00 2011-01-31 23:59:59 
2011-02-01 00:00:00 2011-02-28 23:59:59 
2011-03-01 00:00:00 2011-03-31 23:59:59 
2011-04-01 00:00:00 2011-04-30 23:59:59 
2011-05-01 00:00:00 2011-05-31 23:59:59 
2011-06-01 00:00:00 2011-06-30 23:59:59 
2011-07-01 00:00:00 2011-07-31 23:59:59 
2011-08-01 00:00:00 2011-08-31 23:59:59 
2011-09-01 00:00:00 2011-09-30 23:59:59 
2011-10-01 00:00:00 2011-10-31 23:59:59 
2011-11-01 00:00:00 2011-11-30 23:59:59 
2011-12-01 00:00:00 2011-12-31 23:59:59 

しかし、2012年の選択、例えば、うるう年を考慮しなければならないでしょう。

私はどのようにそのような記述を書いていますか?

答えて

3
SELECT * 
FROM Table 
WHERE col2 = DATEADD(second, -1, (DATEADD(Month, 1 Col1))) 
-- check for either direction 
OR col1 = DATEADD(second, -1, (DATEADD(Month, 1 Col2))) 

「これは、column2がcol1よりも(1ヶ月以上1秒少ない)行を表示します」と表示されます。

SQL Serverのビルトイン日付ロジックは、うるう年のようなものを自動的に占めます。

+0

+1 OPはどちらの方向の違いなど、両方の方法で比較を行うことができます。 – RedFilter

+0

@RedFilter - 良い点、私はそれを追加します。 – JNK

関連する問題