2017-03-15 9 views
0

私はテンポラリテーブルを持っており、月曜日と曜日の最後の日を日曜日として挿入する必要があります。あなただけのTRUNC(SYSDATE, 'IW') + 7 * (LEVEL - 1)を使用することができますが、私は、クエリが日の倍数である間隔を追加していることを明示することを好む:表には注意Oracle 11g連続した16週の最初の曜日と最後の曜日を挿入するクエリ

BUCKET_ID START_DATE END_DATE 
1   13-MAR-17 19-Mar-17 
2   20-MAR-17 26-Mar-17 
3   27-Mar-17 02-APr-17 
+0

提供された条件では、出力を完全に判断するには不十分です。最初の週、最後の週、またはテーブルの他のすべての日付が計算される最初の月曜日は何が必要ですか?あるいは、あなたは16週間連続でテーブルに記入することが許されていますか? – mathguy

答えて

3
INSERT INTO your_temp_table 
SELECT LEVEL, 
     TRUNC(SYSDATE, 'IW') + NUMTODSINTERVAL(7 * (LEVEL - 1), 'DAY'), 
     TRUNC(SYSDATE, 'IW') + NUMTODSINTERVAL((7 * LEVEL) - 1, 'DAY') 
FROM DUAL 
CONNECT BY LEVEL <= 16; 

のようになります。

IW書式マスクは関係なく、常にNLS_DATE_LANGUAGEまたはNLS_TERRITORY設定の月曜日に始まりISO週に切り捨てられます。 DAY形式のマスクを使用して誰かがこれらの設定を変更した場合(または国際的にクエリを実行した場合)、照会は意図したとおりに行われない場合があります。

+0

TRUNCで実際に書式マスクを使用していないので、教育に感謝します。しかし、なぜ「DAY」ではなく「IW」を使用するのですか? – BriteSponge

+0

@BriteSponge 'IW'はISOウィークに切り詰められます。これは' NLS_DATE_LANGUAGE'や 'NLS_TERRITORY'の設定に関係なく常に月曜日に始まります。 'DAY'を使用して誰かがこれらの設定を変更した場合(または国際的にクエリを実行した場合)、クエリは意図したとおりの動作をしません。 – MT0

+0

ありがとう。あなたは物事を知っていると思うし、BAM - 結局はしなかった。 – BriteSponge

関連する問題