回答是肯定的,万能的SQL一定不会辜负我们对他的期望。请见此文分解。
1.思路
想办法得到今年最后一天的日期,然后使用to_char函数的“DDD”参数(此参数用于返回给定日期对应一年中的第几天)便可知晓今年共有多少天。
2.我们来逐步达到最终目标
1)使用当前时间(sysdate)得到今年的第一天:2010-01-01
sec@ora10g> select trunc(sysdate,'y') from dual;
TRUNC(SYSDATE,'Y')
-------------------
2010-01-01 00:00:00
2)在此基础上增加12个月便可得到明年的第一天:2011-01-01
sec@ora10g> select add_months(trunc(sysdate,'y'),12) from dual;
ADD_MONTHS(TRUNC(SY
-------------------
2011-01-01 00:00:00
3)明年第一天减去一天便得到了今年的最后一天日期:2010-12-31
sec@ora10g> select add_months(trunc(sysdate,'y'),12)-1 from dual;
ADD_MONTHS(TRUNC(SY
-------------------
2010-12-31 00:00:00
4)最后我们使用TO_CHAR函数的“DDD”参数得到今年共有多少天
sec@ora10g> select to_char(add_months(trunc(sysdate,'y'),12)-1,'DDD')||' Days' as "How many days in this year?" from dual;
How many days in this year?
---------------------------
365 Days
3.有关TO_CHAR函数“DDD”参数的描述请参考Oracle的官方文档描述
http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/sql_elements004.htm#i34924
中的“Table 2-15 Datetime Format Elements”中有关于“DDD”格式的说明。
DDD |
Yes |
Day of year (1-366). |
4.其实只要知道每年的最后一天便可以快速的获得每年包含的总天数
sec@ora10g> select to_char(to_date('2010-12-31','yyyy-mm-dd'),'DDD') as "How many days in this year?" from dual;
How many days in this year?
---------------------------
365
sec@ora10g> col "How many days in 2004?" for a44
sec@ora10g> select to_char(to_date('2004-12-31','yyyy-mm-dd'),'DDD') as "How many days in 2004?" from dual;
How many days in 2004?
--------------------------------------------
366
sec@ora10g> col "How many days in 2005?" for a44
sec@ora10g> select to_char(to_date('2005-12-31','yyyy-mm-dd'),'DDD') as "How many days in 2005?" from dual;
How many days in 2005?
--------------------------------------------
365
5.小结
SQL的魅力在于她的灵活多变,随心所欲,我们仅需掌握一些基本的规则便可以实现我们诸多想法。
SQL,永恒的话题。
Good luck.
secooler
10.02.08
-- The End --