@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

Oracleでの年、週番号の取り扱いについて

1
投稿者投稿内容
ギム
会議室デビュー日: 2009/03/05
投稿数: 1
投稿日時: 2009-03-05 11:51
お世話になります。
oracleで6桁の文字列を年、週番号として取り扱いたいのですが
どのようにすればよいでしょうか?

たとえば、
'200903'という文字列を2009年の03週目とみなし、
これを足し引きして4週前は?とか3週後は?などを求めたいです。
2009年の03週の4週前 ⇒ 2008年の53週と正しく取得するためには、
'200903'を'IYYYIW'に変換する必要がありますが、
to_dateではうまく行きません。
何か方法はありますでしょうか?

oracleは10gを使っています。
King
ぬし
会議室デビュー日: 2008/06/20
投稿数: 284
投稿日時: 2009-03-05 12:39
コード:
TO_CHAR(TO_DATE(TO_CHAR(SYSDATE, 'YYYY') || TO_CHAR(SYSDATE, 'WW') * (7 - 1), 'YYYYDDD') - (7 * [マイナスしたい週数]), 'YYYYWW')


これでどう?
1.年の通算週数を年の通算日数に変換(週の先頭日)
2.マイナス(プラス)したい週数分の日数を加減
3.加減した日付を年の通算週数に変換

プラスしたいときは - を + に変えたり。
あともしかしたら結果が1週ずれてるかもしれないんでその時は調節して・・・。
明智重蔵
大ベテラン
会議室デビュー日: 2005/09/05
投稿数: 127
投稿日時: 2009-03-05 21:18
年の最初の日曜日を求めるといいでしょう

コード:
select next_day(to_date('200901','yyyymm')-1,'日')
      +7*(-1+to_number('03')) from dual;
もしくは、
select trunc(to_date('200901','yyyymm')+6,'day')
      +7*(-1+to_number('03')) from dual;

1

スキルアップ/キャリアアップ(JOB@IT)