年における週番号をとる際など下記の日付書式に注意
「YYYY」と「IYYY」
「WW」と「IW」
Oracleリファレンスによると、下記のように定義されている。
YYYY・・・4桁で表した年
IYYY・・・ISO規格に基づく4桁の年
WW・・・年における週(1~53)。第1週はその年の1月1日で始まり、1月7日で終了します。
IW・・・ISO規格に基づく、年における週(1~52または1~53)
ISO規格の「週」の定義は、「常に月曜日で始まって日曜日に終わる」。
ISO規格では、ISO週番号に関連する年が暦年と異なることがある。
1月1日が金~日の場合、1月1日を含む週は、前年の最後の週になる
1月1日が月~木の場合、1月1日を含む週は、新しい年の最初の週になる。
例えば、
■2006年1月1日はISO規格だと2005年の52週目となる。
SQL> select to_char(to_date('2006/01/01', 'yyyy/mm/dd'), 'iyyy-iw') as ISO_WK from dual;
ISO_WK
-------
2005-52
■2007年12月31日はISO規格だと2008年の1週目となる。
SQL> select to_char(to_date('2007/12/31', 'yyyy/mm/dd'), 'iyyy-iw') as ISO_WK from dual;
ISO_WK
-------
2008-01
これを、YYYYWW形式でやってみると、
■2006年1月1日はYYYYWWだと2006年の1週目となる。
SQL> select to_char(to_date('2006/01/01', 'yyyy/mm/dd'), 'yyyy-ww') as YYYY_WW from dual;
YYYY_WW
-------
2006-01
■2007年12月31日はYYYYWWだと2007年の53週目となる。
SQL> select to_char(to_date('2007/12/31', 'yyyy/mm/dd'), 'yyyy-ww') as YYYY_WW from dual;
YYYY_WW
-------
2007-53
WWは1月1日から7日づつ区切った週の番号になる。
★★YYYYとIWを組み合わせてしまったり、IYYYとWWを組み合わせてしまうと危険である。★★
SQL> select to_char(to_date('2006/01/01', 'yyyy/mm/dd'), 'yyyy-iw') as YYYY_IW from dual;
YYYY_IW
-------
2006-52 ←2006/01/01が2006年の52週目になってしまった
SQL> select to_char(to_date('2006/01/01', 'yyyy/mm/dd'), 'iyyy-ww') as IYYY_WW from dual;
IYYY_WW
-------
2005-01 ←2006/01/01が2005年の1週目になってしまった
「YYYY」と「IYYY」
「WW」と「IW」
Oracleリファレンスによると、下記のように定義されている。
YYYY・・・4桁で表した年
IYYY・・・ISO規格に基づく4桁の年
WW・・・年における週(1~53)。第1週はその年の1月1日で始まり、1月7日で終了します。
IW・・・ISO規格に基づく、年における週(1~52または1~53)
ISO規格の「週」の定義は、「常に月曜日で始まって日曜日に終わる」。
ISO規格では、ISO週番号に関連する年が暦年と異なることがある。
1月1日が金~日の場合、1月1日を含む週は、前年の最後の週になる
1月1日が月~木の場合、1月1日を含む週は、新しい年の最初の週になる。
例えば、
■2006年1月1日はISO規格だと2005年の52週目となる。
SQL> select to_char(to_date('2006/01/01', 'yyyy/mm/dd'), 'iyyy-iw') as ISO_WK from dual;
ISO_WK
-------
2005-52
■2007年12月31日はISO規格だと2008年の1週目となる。
SQL> select to_char(to_date('2007/12/31', 'yyyy/mm/dd'), 'iyyy-iw') as ISO_WK from dual;
ISO_WK
-------
2008-01
これを、YYYYWW形式でやってみると、
■2006年1月1日はYYYYWWだと2006年の1週目となる。
SQL> select to_char(to_date('2006/01/01', 'yyyy/mm/dd'), 'yyyy-ww') as YYYY_WW from dual;
YYYY_WW
-------
2006-01
■2007年12月31日はYYYYWWだと2007年の53週目となる。
SQL> select to_char(to_date('2007/12/31', 'yyyy/mm/dd'), 'yyyy-ww') as YYYY_WW from dual;
YYYY_WW
-------
2007-53
WWは1月1日から7日づつ区切った週の番号になる。
★★YYYYとIWを組み合わせてしまったり、IYYYとWWを組み合わせてしまうと危険である。★★
SQL> select to_char(to_date('2006/01/01', 'yyyy/mm/dd'), 'yyyy-iw') as YYYY_IW from dual;
YYYY_IW
-------
2006-52 ←2006/01/01が2006年の52週目になってしまった
SQL> select to_char(to_date('2006/01/01', 'yyyy/mm/dd'), 'iyyy-ww') as IYYY_WW from dual;
IYYY_WW
-------
2005-01 ←2006/01/01が2005年の1週目になってしまった