日期:2014-05-19  浏览次数:20626 次

sql中怎样取当前日期及前12月的日期
如题 小弟遇到一难题 就是想在数据库中查询出当前的日期(格式:2012-04) 及前12个月的日期 并在一列中输出 例如格式
日期
2012-04
2012-03
2012-02
2012-01
2011-12
2011-11
2011-10
2011-09
2011-08
2011-07
2011-06
2011-05


------解决方案--------------------
to_char(sysdate,'yyyy-mm') 这个可以取到当前日期
------解决方案--------------------
如果要一次输出,那么需要用procedure。
或者还有个办法,我们有一个时间表,里面存了20年的时间信息。
就可以用select to_char(column, 'yyyy-mm') from xx where 日期范围(但前日期前12月)
------解决方案--------------------
SQL code

SELECT   TO_CHAR(SYSDATE,'YYYY-MM') YM, 
TO_CHAR(ADD_MONTHS(SYSDATE,-1),'YYYY-MM') YM1,
TO_CHAR(ADD_MONTHS(SYSDATE,-2),'YYYY-MM') YM2,
TO_CHAR(ADD_MONTHS(SYSDATE,-3),'YYYY-MM') YM3,
TO_CHAR(ADD_MONTHS(SYSDATE,-4),'YYYY-MM') YM4,
TO_CHAR(ADD_MONTHS(SYSDATE,-5),'YYYY-MM') YM5,
TO_CHAR(ADD_MONTHS(SYSDATE,-6),'YYYY-MM') YM6,
TO_CHAR(ADD_MONTHS(SYSDATE,-7),'YYYY-MM') YM7,
TO_CHAR(ADD_MONTHS(SYSDATE,-8),'YYYY-MM') YM8,
TO_CHAR(ADD_MONTHS(SYSDATE,-9),'YYYY-MM') YM9,
TO_CHAR(ADD_MONTHS(SYSDATE,-10),'YYYY-MM') YM10,
TO_CHAR(ADD_MONTHS(SYSDATE,-11),'YYYY-MM') YM11
FROM   DUAL;

------解决方案--------------------
探讨

一楼的大侠只能查出一行 二楼的大侠倒是一种办法 但前提是必须建立这么一张时间表 不建 的话 有没有其他方法呢

------解决方案--------------------
那还不简单,用union all不就行了。

SQL code

SELECT TO_CHAR(SYSDATE,'YYYY-MM') YM FROM DUAL
UNION ALL
SELECT TO_CHAR(ADD_MONTHS(SYSDATE,-1),'YYYY-MM') YM1 FROM DUAL