相关文章推荐
飞翔的甜瓜  ·  08 | ...·  1 年前    · 
本文介绍了Oracle数据库中获取年份、月份、日期列表的方法,以及如何进行时间增减操作。通过示例展示了如何使用SQL查询两个年份间的所有年份,获取特定时间段内的日期、月份和年份列表,并演示了加减日期、月份和年份的技巧,包括返回日期的最后一天和计算日期间隔的函数。此外,还提到了日期格式化的一些常用函数。 摘要生成于 ,由 DeepSeek-R1 满血版支持, SELECT 2015+level-1 lv FROM DUAL CONNECT BY LEVEL <=2020-2015+1 结果:2015 2016 2017 2018 2019 2020

二、oracle获取某时间段内的年份、月份、日期列表

1、获取日期列表:

SELECT TO_CHAR(TO_DATE('2019-10-01', 'yyyy-MM-dd') + ROWNUM - 1, 'yyyyMMdd') as daylist FROM DUAL CONNECT BY ROWNUM <= trunc(to_date('2019-10-28', 'yyyy-MM-dd') - to_date('2019-10-01', 'yyyy-MM-dd')) + 1 结果: 20191001 20191002 20191003 20191004 20191005 20191006

2、获取月份列表:

SELECT TO_CHAR(ADD_MONTHS(TO_DATE('2020-04', 'yyyy-MM'), ROWNUM - 1), 'yyyyMM') as monthlist FROM DUAL CONNECT BY ROWNUM <= months_between(to_date('2020-10', 'yyyy-MM'), to_date('2020-04', 'yyyy-MM')) + 1 结果:202004 202005 202006 202007 202008 202009 202010

3、获取年份列表:

SELECT TO_CHAR(ADD_MONTHS(TO_DATE('2018-10', 'yyyy-MM'), (ROWNUM - 1) * 12), 'yyyy') as yearlist FROM DUAL CONNECT BY ROWNUM <= months_between(to_date('2020-10', 'yyyy-MM'), to_date('2018-10', 'yyyy-MM')) / 12 + 1 结果:2018 2019 2020

三、oracle 时间增减

1、增加或减去日期

select sysdate,sysdate + interval '1' year from dual; 结果:2021-07-26 15:59:30 2022-07-26 15:59:30

2、增加或减去年分

select TO_CHAR(SYSDATE, 'yyyy'),TO_CHAR(SYSDATE+ interval '-2' year , 'yyyy') from dual 结果:2021 2020

3、增加或减去月份

-- 利用add_months函数 select to_char(add_months(to_date('1999-12','yyyy-mm'),2),'yyyy-mm') from dual;    结果: 2000-02 select to_char(add_months(to_date('1999-12','yyyy-mm'),-2),'yyyy-mm') from dual;  结果: 1999-10 -- 利用interval时间间隔 select TO_CHAR(SYSDATE, 'yyyy-mm'),TO_CHAR(SYSDATE + interval '-1' month , 'yyyy-mm') from dual 结果:2021-07 2021-06

4、查询当前时间1个月以前的时间:

select sysdate,add_months(sysdate,-1) from dual; 结果:2021-07-26 16:17:00 2021-06-26 16:17:00

5、查询当前时间1个月以后的时间:

select add_months(sysdate,1) from dual; 结果:2021-07-26 16:17:49 2021-08-26 16:17:49

6、返回日期的最后一天

select to_char(last_day(sysdate),'yyyy-mm-dd') from dual;   结果: 2021-07-31

7、返回两个日期之间的月份 date2-date1的月份

select months_between(to_date('2021-10-18','yyyy-mm-dd'),to_date('2021-3-18','yyyy-mm-dd')) from dual;

特殊格式的日期型函数

Y或YY或YYY 年的最后一位,两位,三位 SELECTTO_CHAR(SYSDATE,'YYY') FROM TABLE_NAME;

Q 季度,1-3月为第一季度     SELECT TO_CHAR(SYSDATE,'Q') FROM TABLE_NAME;

MM  月份数       SELECT TO_CHAR(SYSDATE,'MM') FROM TABLE_NAME;

RM 月份的罗马表示               SELECT TO_CHAR(SYSDATE,'RM') FROM TABLE_NAME;

month 用9个字符表示的月份名 SELECT TO_CHAR(SYSDATE,'month') FROM TABLE_NAME;

ww 当年第几周       SELECT TO_CHAR(SYSDATE,'ww') FROM TABLE_NAME;

w 本月第几周         SELECT TO_CHAR(SYSDATE,'w') FROM TABLE_NAME;

DDD 当年第几天,一月一日为001 ,二月一日032  SELECT TO_CHAR(SYSDATE,'DDD') FROM TABLE_NAME;

DD 当月第几天                      SELECT TO_CHAR(SYSDATE,'DD') FROM TABLE_NAME;

D 周内第几天                        SELECT TO_CHAR(SYSDATE,'D') FROM TABLE_NAME; 如 sunday

DY 周内第几天缩写       SELECT TO_CHAR(SYSDATE,'DY') FROM TABLE_NAME; 如 sun

hh12 12小时制小时数      SELECT TO_CHAR(SYSDATE,'hh12') FROM TABLE_NAME;

hh24 24小时制小时数      SELECT TO_CHAR(SYSDATE,'hh24') FROM TABLE_NAME;

Mi 分钟数         SELECT TO_CHAR(SYSDATE,'Mi') FROM TABLE_NAME;

ss 秒数          SELECT TO_CHAR(SYSDATE,'ss') FROM TABLE_NAME;

TO_NUMBER() 将合法的字符串转换为数字   SELECT TO_NUMBER ('88877') FROM TABLE_NAME; 88877

TO_CHAR() 将数字转换为字符串  SELECT TO_CHAR(88877) FROM TABLE_NAME; '88877'

select to_number(to_char(sysdate,'yyyy')) from dual;或者可以直接使用 Oracle 提供的 Extract 函数 select sysdate from dual; --获得当前系统时间 select extract(year from sysdate) from dual; --获得系统当前年 select extract(month from sy
select wm_concat(to_char(a.aa, 'yyyy') + LEVEL -1) years from ( select to_date('2018-01-01', 'yyyy-mm-dd') aa from dual) a connect by level <= to_char(sysdate, 'yyyy') - to_char(a.aa, 'yyyy')+1 +level -1 表示2018向上取(2018,2019,2...
oracle 中如何获得 日期 中的 年份 Oracle 中,要获得 日期 中的 年份 ,例如把sysdate中的 年份 取出来,并不是一件难事。常用的方法1、Selectto_number(to_char(sysdate,'yyyy')) from dual实例:select to_number(to_char(t.hiredate,'yyyy'))as 入职年, to_number(to_char(t.hir...