PLSQL - 日期操纵函数模板IW/WW/W之区别

日期处理函数pattern中IW、WW、W这三个元素都能表示周,但是他们有着具体的区别:

IW是以ISO 8601标准规定的周制,每个日历星期从星期一开始,星期日为第7天。以1月4日所在周为当年第一周

WW是全年计数的周,以1月1日至7日为当年第一周,此后每七天记为一周

W是全月计数的周,以1日至7日为当月第一周,此后每七天记为一周

PLSQL - 日期操纵函数模板IW/WW/W之区别_第1张图片 

例1:今年1月4日是恰是周一,故以ISO 8601标准,1月前三天划归上年第53周;不过这只体现在周数上,当使用trunc函数截断至周时,则仍以日历周的起止规则行事

SQL> select to_char(to_date('1-1月-2021'), 'iw') jan_1st,
  2         to_char(to_date('4-1月-2021'), 'iw') jan_4th
  3    from dual;

JAN_1ST JAN_4TH
------- -------
53      01

SQL> select trunc(to_date('1-1月-2021'), 'iw') jan_1st,
  2         trunc(to_date('4-1月-2021'), 'iw') jan_4th
  3    from dual;

JAN_1ST     JAN_4TH
----------- -----------
2020/12/28  2021/1/4

例2:WW以1月1日起,至7日算作当年第一周,并以此后每七天计为一周;从而每七天的第一天即当周第一天,以此类推

SQL> select to_char(to_date('31-12月-2020'), 'ww') dec_31st,
  2         to_char(to_date('4-1月-2021'), 'ww') jan_4th
  3    from dual;

DEC_31ST JAN_4TH
-------- -------
53       01

SQL> select trunc(to_date('31-12月-2020'), 'ww') dec_31st,
  2         trunc(to_date('4-1月-2021'), 'ww') jan_4th
  3    from dual;

DEC_31ST    JAN_4TH
----------- -----------
2020/12/30  2021/1/1

例3:W以每月1日算起,至7日为该月第一周,以此类推

SQL> select to_char(to_date('31-12月-2020'), 'w') dec_31st,
  2         to_char(to_date('1-1月-2021'), 'w') jan_1st
  3    from dual;

DEC_31ST JAN_1ST
-------- -------
5        1

SQL> select trunc(to_date('31-12月-2020'), 'w') dec_31st,
  2         trunc(to_date('1-1月-2021'), 'w') jan_1st
  3    from dual;

DEC_31ST    JAN_1ST
----------- -----------
2020/12/29  2021/1/1

你可能感兴趣的:(Oracle学习笔记,plsql,date)