Oracleの四半期に基づいて日付範囲を抽出して表示する方法を教えてください。
-
13-12-2019 - |
質問
ストアドプロシージャの一部としてサマリテーブルを構築しています.2つの列があります。最初の列は開始を示す必要があり、2番目の列は、四半期を指定する番号である入力パラメータからの日付範囲の終わりを示す必要があります。私はASKTOMから次のものを抽出することができましたが、いくつか質問があります。
Open C1 FOR
SELECT ( SELECT TRUNC (SYSDATE, 'Q')-1+1 AS 'StartOf' FROM DUAL ),
SELECT ( SELECT TRUNC(ADD_MONTHS (SYSDATE, +3), 'Q')-2 AS 'EndOf' FROM DUAL )
FROM DUAL;
.
質問1.ここでの数学はLeapyearsを説明します...
質問2.入力パラメータを特定の四半期に追加する方法を教えてください。私はSysdateの代わりに入れようとしましたが、私は最初にそれを最初に再フォーマットする必要がありますか?
何らかの応答をおかげでありがとうございました。
解決
トム・カイテはあなたの答えをお答えしています。 http:// asktom..oracle.com / pls / asktom / f?p= 100:11:0 :::::::: p11_question_id:250288900346075009
Open C1 FOR
select add_months( dt, (inQuarter-1)*3 ),
last_day(add_months( dt, (inQuarter-1)*3+2 ) )
from (
select to_date( inYear || '0101', 'yyyymmdd' ) dt
from dual)
. 他のヒント
数値と数値パラメータをDATE
SELECT add_months( trunc( to_date( to_char( <<numeric year>> ),
'YYYY' ),
'YYYY' ),
3 * <<numeric quarter>> ) first_of_quarter,
add_months( trunc( to_date( to_char( <<numeric year>> ),
'YYYY' ),
'YYYY' ),
4 * <<numeric quarter>> ) - 1 last_of_quarter,
FROM dual
.
両方の日付の時間成分は、四半期の最終日の真夜中になります(すなわち、次の四半期の開始前の24時間前)。四半期の最後の日に、四半期の最後の日に最後の四半期を23:59:59にしたいと思うかもしれません。
私は提案する:
Open C1 FOR
SELECT TRUNC (d_inQuarter, 'Q') AS "StartOf",
TRUNC(ADD_MONTHS (d_inQuarter, +3), 'Q') AS "EndOf"
FROM (SELECT add_months(to_date(to_char(i_yr)||'-01-01','YYYY-MM-DD'), (i_q-1)*3)
AS d_inQuarter FROM DUAL);
.
- 整数パラメータI_yrとI_Qはそれぞれ年と四半期を表しています。
次の四半期の最初の日の午前0時に表現するので、どの選択は< "EndOf"
ではなく条件<= "EndOf"
に基づく必要があります。(これは、四半期の最終日のすべての時間が含まれていることを確認する必要があります。)
所属していません StackOverflow