SQL where句は正確には1ヶ月から1秒を差し引いた日付ですか?

私はテーブルに2つのdatetimeカラムを持っています。そして、最初のカラムから2番目のカラムまでの差が1月の1秒に満たない行を正確に選択したいと思います。たとえば、2011年のdatetimesのこれらの行を選択します。

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を選択すると、うるう年を考慮する必要があります。

どのように私はそのような声明を書くだろうか?

1

1 答え

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が(1ヶ月以上1秒未満)col1の行を表示します。"

SQL Serverの組み込み日付ロジックは、うるう年のようなものを自動的に説明します。

3
追加された
+1 OPは、どちらの方向の違いなど、両方の方法で比較を行うことが望ましいかもしれないことに注意してください。
追加された 著者 RedFilter,
@RedFilter - 良い点、私はそれを追加します。
追加された 著者 JNK,