2016-06-17 5 views
0

OracleのSQL日付からの週をとしたいと思います。Oracleクエリーで四半期の週を決定する方法

私は年、四半期、週を検索するために以下のクエリを試しました。 は、しかし、週フィールドはありません

選択to_char関数(SYSDATE、「YYYY」)「週四半期の」「月のウィーク」与え|| '-Q' || to_char(sysdate、 'Q')|| '-W' || > to_char(sysdate、 'w')は現在の時刻です デュアルから;

上記のクエリは、月の第3週に該当するため、 '2016-Q2-W3'を返します。

セイのSYSDATEは、 '2016年6月17日'

2016-Q2- W12

マイウィーク範囲があるように私は結果を期待していている(日曜日 - 土曜日)

「2016年6月17日」は四半期の12週目になるため、W12にする必要があります。

ありがとうございます。

+2

あなたの現在のクエリがに簡素化することができます: 'デュアルから "現在の時刻" としてTO_CHAR(SYSDATE、 'YYYY- "Q" Q- "W" W')を選択します。' – MT0

+1

'SELECT TRUNC(SYSDATE ' Q ')FROM DUAL'は金曜日である '2016-04-01'を返します。 '2016-Q2-W1'は金曜日から木曜日まで走っていますか?または、それは月曜日から日曜日に実行されますか?または、他の何か? – MT0

答えて

2

これは週(日曜日 - 土曜日)を取得します四半期のを:

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日追加する)。
+0

でお願いします。 また、「2016年6月19日」の日付に「2016-Q2-W13」と表示されます。あなたの解決策は6月23日まで 'W12'を返します。 – Munesh

+0

'SELECT TRUNC(SYSDATE、 'Q')FROM DUAL'は金曜日である' 2016-04-01'を返します。 '2016-Q2-W1'は金曜日から木曜日まで走っていますか?または、それは月曜日から日曜日に実行されますか?または、他の何か? – MT0

関連する問題