曜日を指定する日付書式指定子 'D'(1から7まで)で始まります。 1つの問題は、Oracleが返すものはNLS_TERRITORYの設定に依存するため、日曜日、月曜日(または土曜日も考えています)になる可能性があります。
北米と同様に、値1は日曜日を表しているとします。例えば
、木曜日、TO_NUMBER(TO_CHAR(SYSDATE、 'D'))上の任意の曜日のための最後の土曜日の日付5.
sysdate - to_number(to_char(sysdate, 'D'))
リターンを返します。
これは、NLS_TERRITORY設定に従って、曜日(1)の最初の日が日曜日である場合にのみ機能します。例えば
1は月曜日を表す場合、その後、先週の土曜日はsysdate - to_number(to_char(sysdate, 'D'))-1
より良いアプローチは、ハードコードに、クエリでNLS_DATE_LANGUAGE設定です、そして日が一日名前からのオフセットを取得:
select case to_char (sysdate, 'FmDay', 'nls_date_language=english')
when 'Monday' then 2
when 'Tuesday' then 3
when 'Wednesday' then 4
when 'Thursday' then 5
when 'Friday' then 6
when 'Saturday' then 7
when 'Sunday' then 1
end d
from dual
ので
sysdate -case to_char (sysdate, 'FmDay', 'nls_date_language=english')
when 'Monday' then 2
when 'Tuesday' then 3
when 'Wednesday' then 4
when 'Thursday' then 5
when 'Friday' then 6
when 'Saturday' then 7
when 'Sunday' then 1
end
は確実にあなたのための最後の土曜日の日付を与えますNLSの設定にかかわらず、任意の曜日。
あなたの質問は不明です。 –
sysdateとnext_dayはすでに日付であるため、TO_DATE(...、 'DD-MON-YY')は不要です –
質問のフレーミング 以下のOracle SQLクエリがあります。 pr_tabからのp_name、cal_vale、l_dateの選択 L_date = to_date('03 -sep-16 '、' dd-mon-yy '); ここで、03-Sep-16は、最後の土曜日のデータをデータベースから取得するための、ハードコードされた日付の値です。 このハードコーディングされた値を使用するのではなく、最後の土曜日のデータをデータベースから取得するこのプロセスを自動化するOracle SQL関数を使用したいと考えています。 – user1917985