1. 简单查询
说明 | 查询 sql |
---|---|
日期格式化 | select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual; |
本月第一天 | select to_char(trunc(sysdate, 'mm'),'yyyy-mm-dd') from dual; |
本月最后一天 | select to_char(last_day(trunc(sysdate)),'yyyy-mm-dd') from dual; |
上月第一天 | select to_char(last_day(add_months(trunc(sysdate),-2))+1,'yyyy-mm-dd') from dual; |
上月最后一天 | select to_char(last_day(add_months(trunc(sysdate),-1)),'yyyy-mm-dd') from dual; |
下月第一天 | SELECT to_char(last_day(SYSDATE) + 1,'yyyy-mm-dd') FROM dual; |
下月最后一天 | select to_char(last_day(add_months(trunc(sysdate),1)),'yyyy-mm-dd') from dual; |
2. 查询两个日期范围内所有日期列表
sql
WITH xrange AS ( SELECT
to_date( '2025-05-03', 'yyyy-mm-dd' ) AS start_date,
to_date( '2025-06-07', 'yyyy-mm-dd' ) AS end_date
FROM dual )
SELECT
t.GEN_DATE AS start_date,-- 开始时间
t.GEN_DATE AS end_date -- 结束时间
FROM
( SELECT to_char( start_date + LEVEL - 1, 'YYYYMMDD' ) AS gen_date FROM xrange CONNECT BY start_date + LEVEL - 1 <= end_date ) t;
3. 查询两个月份范围内所有月份列表
sql
WITH xrange AS ( SELECT
to_date( '2024-01' || '-01', 'yyyy-mm-dd' ) AS start_date,
to_date( '2025-03' || '-01', 'yyyy-mm-dd' ) AS end_date FROM dual )
SELECT
t.GEN_DATE AS start_month,-- 开始时间
t.GEN_DATE AS end_month -- 结束时间
FROM
(
SELECT
to_char( ADD_MONTHS( start_date, LEVEL - 1 ), 'YYYYMM' ) AS gen_date
FROM
xrange CONNECT BY LEVEL <= MONTHS_BETWEEN( TRUNC( end_date, 'MONTH' ), TRUNC( start_date, 'MONTH' ) ) + 1
) t;
4. 查询指定月份的所有日期列表
sql
WITH xrange AS (
SELECT
to_date( '202501' || '01', 'yyyymmdd' ) AS start_date,
last_day( to_date( '202501' || '01', 'yyyymmdd' ) ) AS end_date
FROM
dual
) SELECT
t.GEN_DATE AS start_date,-- 开始时间
t.GEN_DATE AS end_date -- 结束时间
FROM
( SELECT to_char( start_date + LEVEL - 1, 'YYYYMMDD' ) AS gen_date FROM xrange CONNECT BY start_date + LEVEL - 1 <= end_date ) t;