在数据库中,没有维护类似万年历的表的时候,我们表中只有存着yyyy-mm-dd的日期数据,但是我们需要得出该日期所在的年月季周等信息,此时便可用到以下SQL:
select to_char(TO_DATE('20110101', 'YYYYMMDD'), 'yyyyiw') as week, --求第几周
to_char(TO_DATE('20110101', 'YYYYMMDD'), 'yyyyww') as week2, --求第几周
to_char(TO_DATE('20110101', 'YYYYMMDD'), 'yyyy') as year, --求第几年
to_char(TO_DATE('20110101', 'YYYYMMDD'), 'yyyymm') as month, --求本年的第几月
to_char(TO_DATE('20110101', 'YYYYMMDD'), 'yyyyddd') as day, --求本年的第几天
to_char(TO_DATE('20110401', 'YYYYMMDD'), 'yyyyq') as quarter -- 求本年的第几季度
from dual
注备:如果已经是日期类型,则可不用TO_DATE,直接TO_CHAR(字段名,'yyyyq')即可!
第一个和第二个的区别:第一个是以完整周计算 ,比如这年的前一年的最后一天是星期三,那么这一年的一号,是算在去年的那一周里面,例子中20110101,便是2010的第52周,但是结果显示的是:【201152,这里需要注意】,第二个则是以一号所在周为第一周,一月一号不管星期几,就以它所在的周为第一周;