ITPub博客

首页 > 数据库 > Oracle > 【“DDD”】今年共有多少天?

【“DDD”】今年共有多少天?

原创 Oracle 作者:OCMU联盟 时间:2010-02-08 23:31:53 0 删除 编辑
单纯的使用SQL,有没有办法快速得到今年一共有多少天,是365天还是366天,还是……?
回答是肯定的,万能的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的官方文档描述

中的“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 --

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70034820/viewspace-2994211/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
OCM联盟( Oracle Certified Master Union)是由侯圣文(ACE总监)发起的一个公益组织,旨在为每一个OCM大师提供一个可以继续展示自己才华,技术和实力的平台。

注册时间:2007-05-27

  • 博文量
    799
  • 访问量
    8407026