你好每一个我想要获得一年中所有月份的Ist日期 就像Curretn年是2012年一样,我希望得到一个查询的结果 像
1-JAN-2012
1-FEB-2012
1-APR-2012
.
.
.
.
.
.
1-DEC-2012
有没有人可以提前解决我的问题
答案 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