2017-02-02 7 views
1

最後の日曜日を印刷して、それに7を加えて来年のすべての日曜日を印刷する必要があります。今年の最後の日曜日をOracleに印刷する方法

開始日がある場合は特定の年のすべての日曜日を印刷するコードがありますが、前年の最後の日曜日が生成され、最初に7が追加されるように年を設定する必要がありますその年の日曜日など、来年の最後の日曜日になるまで

たとえば、入力年は2017です.2016年の最後の日曜日をチェックし、7を追加して、最初の日曜日には、 2017年12月31日になるまですべての日曜日に印刷されます。

+1

できます。しかし、今まで行ったことを分かち合ってください –

+0

年の最後の日曜日に7を追加すると、**その年のすべての日曜日はどうやって取得できますか?あなたは**次の**年を意味しますか?それとも、今年の最初の日曜日が必要なのですか? – mathguy

+0

こんにちは私はまだできません..それはちょうど私はユーザーから一年を受け入れる必要があります.....例えば..... 入力年:2014 出力: 1. 2013年の最後の日 2. 2014年の最初の日曜日 3.第二日曜日の2014 4.第三日曜日の2014. などなど – Abhijith

答えて

3

関数next_day()は、日付と曜日の名前の2つの引数をとります。指定された曜日に一致する最も近い「次の日」(日付引数に続く)を返します。結果は1日から7日の間です。 (「火曜日」を希望し、入力日が火曜日の場合、関数は7日後に日付を返します)

年の最後の日曜日を希望する場合は、12月25日から12月31日の間になります。だから、next_day()関数を引数12月24日(!!)と「日曜日」で呼び出すと、あなたが望むものが得られます。

結果は日付引数と同じ時刻になります。時刻を指定せずに日付を指定すると、結果も出力されます(これはおそらく必要なものです)。だから、:

select next_day(date '2016-12-24', 'Sunday') from dual; 

NEXT_DAY(D 
---------- 
2016-12-25 

追加:あなたが入力として2017を提供する場合(何らかのメカニズムを

select next_day(to_date(:input_year - 1 || '-12-24', 'yyyy-mm-dd'), 'Sunday') from dual; 

:あなたはバインド変数として、ユーザーからの入力を取る場合、あなたはこのような何かを行うことができますあなたのインタフェースにはバインド変数があります)、出力は2016-12-25になります(DATEデータ型では、 "どのような形式で" - 日付には書式がありません)。

+0

whats '-12- 24 '入力すると2017を入力し、2016年を最後に入力した日曜日は2016年12月25日です。 – Abhijith

+0

2017年を入力した場合、 'input_year-1'は2016年です'||'は連結演算子です(テキストを追加してください)。余分なテキストは '12-24'です(**固定**文字列:計算には12月24日の日付が必要です)。したがって、文字列は '' 2016-12-24 'になり、これは 'to_date()'によって日付に作られます。したがって、あなたが2017年を与えると、自動的に日付「2016-12-24」が作成され、それは答えの前の部分で説明したように、2016年の最後の日曜日の計算に使用されます。 – mathguy

関連する問題