DWにTIMEディメンションがあり、年の季節を記入するキャンプを追加したいとします。 は、私はこのような何かをしたい:SQLで年の季節別に日付を区切る問題
create or replace
PROCEDURE "PROC_UPDATE_SEASON"
IS
CURSOR curs IS
SELECT * FROM indw.time FOR UPDATE;
cur_d NUMBER;
cur_m NUMBER;
start_d NUMBER;
start_m NUMBER;
end_d NUMBER;
end_m NUMBER;
cur_Date DATE;
BEGIN
FOR cs IN curs
LOOP
cur_d := to_number(to_char(cs.time_DAY,'dd'));
cur_m := to_number(to_char(cs.time_DAY,'mm'));
cur_date:= cs.time_DAY; -- this is my date dd-mm-yyyy or dd/mm/yyyy
if ((cur_date in format dd/mm is >= 21/12 and <=31/12) OR cur_date>=01/01 and <=20/03)
UPDATE time t set t.time_SEASON = 'Winter' WHERE CURRENT OF curs;
else if cur_date_in format dd/mm is between a date and another then it's Spring)
-- and so on ...
END LOOP;
END;
この使用してTO_CHARを達成し、TO_DATEする方法はありますか?私がしようとしますが、常にエラーを取得:(月と日を比較し、別々に途方もないと、IMO、愚かな仕事になります。
あなたは私にいくつかのヒントを与えてもらえてる?
私は本当に好きただ一つの使用何かをDD/MM < = another_date_with_only_day_and_month
ありがとうございます。私はOWBでこの手続き、事後手続きを試してみるつもりです。私は急いでいるからです。しかし、できるだけ早くあなたが言及した最後のオプションを試してみたいと思います。 – neverMind
問題は、to_char(time_DAY、 'DD-MM')> = '21 -12'doesn'tは動作しますが、どちらの場合でも、日付と比較する必要があることです。select to_date(to_char time_day、 'dd-mm')、 'dd-mm'これはすでに動作しています:to_Ddate(to_char(time_day、 'dd-mm-yyyy')、 'dd-mm-yyyy'どうすればこれを克服できますか? – neverMind
これは、 'MMDD'という形式を使用しているため、日付と同じ方法で並べ替える文字列になります。 –