Oracle sysdate 灵活日期
Oracle sysdate flexible date
我算出了这个说法
SELECT to_date('30.06.2016', 'dd.mm.yyyy') - (LEVEL-1) DATUM
FROM DUAL
CONNECT BY LEVEL <= 366;
它给出了从 30.06.2016
到过去 366 天的所有日期。
到目前为止一切顺利。
我需要补充的是to_date('30.06.2016')
更灵活..
我的意思是我总是希望它使用 sysdate + 1 年中 6 月的最后一天。
在这种情况下,我们现在有 2015 年 - 所以我们有 2016 年 6 月 30 日。
如果我们有 2016,我需要它来使用 30.06.2017。
如果我们有 2017 年,我需要它来使用 30.06.2018。
..
..
感谢您的帮助。
编辑解决方案:
SELECT last_day(add_months(to_date('01.06.' || to_char(sysdate, 'YYYY'), 'dd.mm.yyyy'),12)) - (LEVEL-1) DATUM
FROM DUAL
CONNECT BY LEVEL <= 366
步骤如下:
- 使用 Trunc() 将 sysdate 截断为年份。
- 使用 Add_Months() 添加 18 个月。
- 减去一天。
与您的代码相同,但使用 to_char:
从 sysdate 获取年份
select to_date('30.06.'||(to_char(sysdate,'yyyy')+1),'dd.mm.yyyy') from dual;
如果您想要 366 天的约会:
SELECT TRUNC( SYSDATE, 'YEAR' ) + INTERVAL '18' MONTH - LEVEL AS DATUM
FROM DUAL
CONNECT BY LEVEL <= 366;
或者,如果您想要一年(365 天或闰年 366 天)的日期(今年 7 月 1 日至明年 6 月 30 日):
SELECT TRUNC( SYSDATE, 'YEAR' ) + INTERVAL '18' MONTH - LEVEL AS DATUM
FROM DUAL
CONNECT BY TRUNC( SYSDATE, 'YEAR' ) + INTERVAL '18' MONTH - LEVEL >= TRUNC( SYSDATE, 'YEAR' ) + INTERVAL '6' MONTH;
我算出了这个说法
SELECT to_date('30.06.2016', 'dd.mm.yyyy') - (LEVEL-1) DATUM
FROM DUAL
CONNECT BY LEVEL <= 366;
它给出了从 30.06.2016
到过去 366 天的所有日期。
到目前为止一切顺利。
我需要补充的是to_date('30.06.2016')
更灵活..
我的意思是我总是希望它使用 sysdate + 1 年中 6 月的最后一天。
在这种情况下,我们现在有 2015 年 - 所以我们有 2016 年 6 月 30 日。
如果我们有 2016,我需要它来使用 30.06.2017。 如果我们有 2017 年,我需要它来使用 30.06.2018。 .. ..
感谢您的帮助。
编辑解决方案:
SELECT last_day(add_months(to_date('01.06.' || to_char(sysdate, 'YYYY'), 'dd.mm.yyyy'),12)) - (LEVEL-1) DATUM
FROM DUAL
CONNECT BY LEVEL <= 366
步骤如下:
- 使用 Trunc() 将 sysdate 截断为年份。
- 使用 Add_Months() 添加 18 个月。
- 减去一天。
与您的代码相同,但使用 to_char:
从 sysdate 获取年份select to_date('30.06.'||(to_char(sysdate,'yyyy')+1),'dd.mm.yyyy') from dual;
如果您想要 366 天的约会:
SELECT TRUNC( SYSDATE, 'YEAR' ) + INTERVAL '18' MONTH - LEVEL AS DATUM
FROM DUAL
CONNECT BY LEVEL <= 366;
或者,如果您想要一年(365 天或闰年 366 天)的日期(今年 7 月 1 日至明年 6 月 30 日):
SELECT TRUNC( SYSDATE, 'YEAR' ) + INTERVAL '18' MONTH - LEVEL AS DATUM
FROM DUAL
CONNECT BY TRUNC( SYSDATE, 'YEAR' ) + INTERVAL '18' MONTH - LEVEL >= TRUNC( SYSDATE, 'YEAR' ) + INTERVAL '6' MONTH;