如何找到一年中所有重要日期的第一个日期

时间:2012-06-23 10:23:55

标签: sql oracle

你好每一个我想要获得一年中所有月份的Ist日期 就像Curretn年是2012年一样,我希望得到一个查询的结果 像

1-JAN-2012
1-FEB-2012
1-APR-2012
.
.
.
.
.
.
1-DEC-2012

有没有人可以提前解决我的问题

4 个答案:

答案 0 :(得分:5)

只是为了完整 - 这是一个更简单的版本:

select ADD_MONTHS(TRUNC(SYSDATE,'Y'),ROWNUM-1)
from dual connect by level <= 12;

答案 1 :(得分:3)

日历表更易于使用。例如,在我工作的地方,您只需运行此查询。

select cal_date
from calendar
where year_of_date = 2012
  and day_of_month = 1;

对于明显的查询,有很多话要说。

答案 2 :(得分:2)

请尝试以下方法。您可能想要调整日期格式/时区

select to_date('2012/'||l||'/01', 'yyyy/mm/dd') 
from (select level l from dual connect by level < 13)

编辑:正如评论中的op所提供的那样,需要采用当前年份而不是硬编码。更新的查询是

SELECT L || '/01/' || TO_CHAR (SYSDATE, 'YYYY') DATESS FROM 
(SELECT LEVEL L FROM DUAL CONNECT BY LEVEL < 13)

答案 3 :(得分:1)

如果您想使用 日期函数来获取特定年份的值,可以使用以下代码also SQL Fiddle'd

select add_months(trunc(last_day(add_months(trunc(to_date('2011'
                                                         ,'yyyy')
                                                  , 'y')
                                            , -1)
                                 ) + 1
                        )
                 , level - 1) 
  from dual
connect by level <= 12

这会将您的“年份”变为日期,将其截断为1月份的1 st ,默认情况下to_date('2011', 'yyyy')会返回该年份的当前日期。它然后删除一个月,带我们到2010年12月的1 st 。得到那个月的最后一天,31 st 12月并且增加一天,所以回到1月1日,但我也做connect by level并添加level - 1,即1月份的0,以返回正确的日期。

不幸的是,Oracle没有first_day函数,这会使这更容易。

今年大致相同:

select add_months(trunc(last_day(add_months(trunc(sysdate,'y'),-1)) + 1), level - 1) 
  from dual
 connect by level <= 12