これにより、四半期の週(日曜日から土曜日)が取得されます:
SELECT TO_CHAR( SYSDATE, 'YYYY-"Q"Q-"W"' )
|| ( 7 + TRUNC( SYSDATE + 1, 'IW' ) - TRUNC( TRUNC( SYSDATE, 'Q' ) + 1, 'IW' ) ) / 7;
AS "Current Time"
FROM DUAL
説明 :
-
NEXT_DAY(TRUNC(date_value)、'SUNDAY')-7
を使用して、特定の日付の直前または直前の日曜日を見つけることができます。 (これはNLS_TERRITORY
に依存します 設定)またはTRUNC(date_value + 1、'IW')-1
(これは短く、設定に依存しません)。 -
TRUNC(date_value、'Q')
value
を含む四半期の最初の日の日付を示します 日付(つまり、1月1日、4月1日、7月1日、または10月1日)。 - 2つを組み合わせると、四半期の初日の直前の日曜日は、
TRUNC(TRUNC(date_value、'Q')+ 1、'IW')-1 コード>
- したがって、四半期の開始直前の日曜日と特定の日付の直前または直前の日曜日の間の日数は次のようになります。
(TRUNC(date_value + 1、 ' IW')-1)-(TRUNC(TRUNC(date_value、' Q')+ 1、' IW')-1)
--1
をキャンセルすることで簡略化できます 用語。 - 週数の差は、その数を7で割ったものです(ただし、0のインデックス値が得られ、四半期の週番号を1のインデックスにする必要があります。結果に1週間を追加するか、前に分割を行う場合は、7日追加します。