ひっくり返して文字列比較を行うことができます。
SELECT *
FROM widsys.train trn
WHERE to_char(trn.WID_DATE, 'YYYY-IW') ='2008-13'
ORDER BY trn.wid_date;
to_date() が IW で機能しないことは理にかなっていると思います。週の始まりがややあいまいなためです。ロケールによっては週の始まりが日曜日であったり、月曜日であったりします。したがって、日、月、または年は難しいでしょう。
編集:
自然な並べ替えで十分であることには同意しますが、考えさせられました。特定の日付と書式設定された YYYY-IW 文字列をどのように比較しますか? 私はそれを突き刺しました。この試みは、日付と YYYY-IW 形式の varchar を取る関数に組み込むことができますが、ハードコードされた文字列と to_date() 関数呼び出しを置き換えて、クリーンアップを実行する必要があります。
渡された日付が year/weekofyear より前の場合は -1 を返し、日付が指定された weekofyear 内の場合は 0 を返し、後の場合は 1 を返します。「IW」形式のトークンと同様に、ISO の週で機能します。
select (case
when input.day < a.startofweek then -1
when input.day < a.startofweek+7 then 0
else 1 end)
from
(select
-- //first get the iso offset for jan 1, this could be removed if you didn't want iso
(select (max(to_number(to_char(to_date('2008','YYYY') + level,'DDD'))))
from dual
where to_number(to_char(to_date('2008','YYYY') + level,'IW'))
<2 connect by level <= 6) -6
+
-- //next get the days in the year to the month in question
(select ((to_number(substr('2008-13', 6,2))-1)*7) from dual) startofweek
from dual) a,
-- //this is generating a test date
(select to_number(to_char(to_date('2008-07-19', 'YYYYMMDD'), 'DDD')) day
from dual) input,
dual