select to_char(TO_DATE('20110101', 'YYYYMMDD'), 'yyyyiw') as week, --oracle求当年的第几周
to_char(TO_DATE('20110101', 'YYYYMMDD'), 'yyyyww') as week2, --oracle求当年的第几周
to_char(TO_DATE('20110101', 'YYYYMMDD'), 'yyyy') as year, --oracle求第几年
to_char(TO_DATE('20110101', 'YYYYMMDD'), 'yyyymm') as month, --oracle求当年的第几月
to_char(TO_DATE('20110101', 'YYYYMMDD'), 'yyyyddd') as day, --oracle求当年的第几天
to_char(TO_DATE('20110401', 'YYYYMMDD'), 'yyyyq') as quarter -- oracle求当年的第几季度
from dual
ww
Same day of the week as the first day of the year
按年度1月1日的第一天为每周第一天
iw
Same day of the week as the first day of the ISO week, which is Monday
每周一
w
Same day of the week as the first day of the month
按月份1日的第一天作为每周第一天
这3个参数均为取每周第一天,区别如下:
ww,按每年的1月1日为第一周第一天,1月8日为第二周第一天……依此类推。
2010-1-1为2010年
第一周第一天,取一周的第一天,仍然为
2010-1-1
SQL> select trunc(date'2010-1-1','w') from dual;
TRUNC(DATE'2010-1-1','W')
-------------------------
2010-1-1
2010-1-6为2010年
第一周第六天,取一周的第一天,为
2010-1-1
SQL> select trunc(date'2010-1-6','w') from dual;
TRUNC(DATE'2010-1-6','W')
-------------------------
2010-1-1
2010-1-9为2010年
第二周第二天,取这一周的第一天,为
2010-1-8
SQL> select trunc(date'2010-1-9','w') from dual;
TRUNC(DATE'2010-1-9','W')
-------------------------
2010-1-8
w,与ww功能类似,不过它是按每月的1日为每周第一天,例如1日为当月第一周第一天,8日为第二周第一天……依此类推。 那也就是说,1月份的参数w与ww用trunc函数的结果应该是一致的。 2010-3-1为当月第一周第一天,因此结果为2010-3-1 SQL> select trunc(date'2010-3-1','w') from dual; TRUNC(DATE'2010-3-1','W') ------------------------- 2010-3-1 2010-3-8为当月第二周第一天,第二周第一天为2010-3-8 SQL> select trunc(date'2010-3-8','w') from dual; TRUNC(DATE'2010-3-8','W') ------------------------- 2010-3-8 2010-3-9为当月第二周第二天,第二周第一天为2010-3-8 SQL> select trunc(date'2010-3-9','w') from dual; TRUNC(DATE'2010-3-9','W') ------------------------- 2010-3-8 iw,不受月份与年份的影响,直接取日期参数的周一。 SQL> select trunc(date'2010-3-9','iw') from dual; TRUNC(DATE'2010-3-9','IW') -------------------------- 2010-3-8