1

開始日と終了日の 2 つの日付に基づいてレコードを取得するクエリを作成しています。

私が取得する必要があるのは、指定された期間の一部またはすべてにまたがるレコードです。つまり、開始日がパラメーターの日付より前である可能性がありますが、終了日よりも短いか、開始日より後に開始し、終了日より後に終了します。

つまり、開始日 = 10 月 12 日 01 日と終了日 12 月 31 日です。2012 年 10 月 1 日から 2012 年 10 月 31 日までのレコードも同様です。

実際には、この期間を除外するレコードが必要ですが、まず、このデータセットが正しく取得されていることを確認する必要があります。

4

1 に答える 1

1

日付/時刻データ型MyTableの と の両方を使用して、 にstart_date格納されているこの単純なデータ セットから始めます。end_date

id start_date end_date
 1  9/29/2012 9/30/2012
 2  9/29/2012 10/2/2012
 3  9/29/2012 11/1/2012
 4  10/2/2012 11/1/2012
 5  11/1/2012 11/2/2012

以下のクエリを実行し、andパラメータに and を指定すると、この出力結果セットが得られます2012-10-012012-10-31range_startrange_end

id start_date end_date
 2  9/29/2012 10/2/2012
 3  9/29/2012 11/1/2012
 4  10/2/2012 11/1/2012

これがあなたが望んでいたものと似ていない場合は、質問を編集して、入力データの簡単なサンプル セットとそのサンプルから必要な出力を示してください。

start_dateまた、 myおよびvaluesの時間コンポーネントend_dateはすべて真夜中だったことに注意してください。対応する時刻に他の時刻が含まれている場合は、それらに対処するためにクエリを修正する必要があります。

これは、私が使用したクエリの SQL です。

PARAMETERS range_start DateTime, range_end DateTime;
SELECT m.id, m.start_date, m.end_date
FROM MyTable AS m
WHERE
       m.start_date Between [range_start] And [range_end]
    OR m.end_date Between [range_start] And [range_end]
    OR (m.start_date<[range_start] AND m.end_date>[range_end]);
于 2012-10-17T16:07:59.897 に答える