插件窝 干货文章 oracle 查询语句 时间

oracle 查询语句 时间

SYSDATE SELECT dual 查询 973    来源:    2025-04-23

Oracle 时间查询语句

基本时间查询

  1. 当前时间查询

    SELECT SYSDATE FROM dual; -- 当前系统日期和时间
    SELECT CURRENT_DATE FROM dual; -- 当前会话时区的日期
    SELECT CURRENT_TIMESTAMP FROM dual; -- 当前会话时区的时间戳
    
  2. 特定格式显示时间

    SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') FROM dual;
    

时间范围查询

  1. 查询今天的数据

    SELECT * FROM table_name 
    WHERE date_column >= TRUNC(SYSDATE) 
    AND date_column < TRUNC(SYSDATE) + 1;
    
  2. 查询昨天数据

    SELECT * FROM table_name 
    WHERE date_column >= TRUNC(SYSDATE) - 1 
    AND date_column < TRUNC(SYSDATE);
    
  3. 查询本周数据

    SELECT * FROM table_name 
    WHERE date_column >= TRUNC(SYSDATE, 'IW') 
    AND date_column < TRUNC(SYSDATE, 'IW') + 7;
    
  4. 查询本月数据

    SELECT * FROM table_name 
    WHERE date_column >= TRUNC(SYSDATE, 'MM') 
    AND date_column < ADD_MONTHS(TRUNC(SYSDATE, 'MM'), 1);
    

时间计算

  1. 加减天数

    SELECT SYSDATE + 1 FROM dual; -- 明天此时
    SELECT SYSDATE - 7 FROM dual; -- 一周前
    
  2. 加减月份

    SELECT ADD_MONTHS(SYSDATE, 3) FROM dual; -- 3个月后
    SELECT ADD_MONTHS(SYSDATE, -6) FROM dual; -- 6个月前
    
  3. 计算两个日期之间的天数

    SELECT date1 - date2 FROM dual;
    
  4. 计算两个日期之间的月份

    SELECT MONTHS_BETWEEN(date1, date2) FROM dual;
    

时间函数

  1. 提取日期部分

    SELECT EXTRACT(YEAR FROM SYSDATE) FROM dual;
    SELECT EXTRACT(MONTH FROM SYSDATE) FROM dual;
    SELECT EXTRACT(DAY FROM SYSDATE) FROM dual;
    
  2. 获取日期中的特定部分

    SELECT TO_CHAR(SYSDATE, 'YYYY') FROM dual; -- 年
    SELECT TO_CHAR(SYSDATE, 'MM') FROM dual; -- 月
    SELECT TO_CHAR(SYSDATE, 'DD') FROM dual; -- 日
    
  3. 四舍五入日期

    SELECT ROUND(SYSDATE, 'YEAR') FROM dual; -- 按年四舍五入
    SELECT ROUND(SYSDATE, 'MONTH') FROM dual; -- 按月四舍五入
    
  4. 截断日期

    SELECT TRUNC(SYSDATE, 'YEAR') FROM dual; -- 截断到年初
    SELECT TRUNC(SYSDATE, 'MONTH') FROM dual; -- 截断到月初
    

时区相关查询

  1. 时区转换

    SELECT FROM_TZ(CAST(SYSDATE AS TIMESTAMP), 'America/New_York') FROM dual;
    SELECT NEW_TIME(SYSDATE, 'GMT', 'PST') FROM dual;
    
  2. 获取时区信息

    SELECT DBTIMEZONE FROM dual; -- 数据库时区
    SELECT SESSIONTIMEZONE FROM dual; -- 会话时区
    

高级时间查询示例

  1. 查询过去30分钟内的记录

    SELECT * FROM table_name 
    WHERE date_column >= SYSDATE - INTERVAL '30' MINUTE;
    
  2. 查询上个月的同一天

    SELECT ADD_MONTHS(SYSDATE, -1) FROM dual;
    
  3. 查询本季度数据

    SELECT * FROM table_name 
    WHERE date_column >= TRUNC(SYSDATE, 'Q') 
    AND date_column < ADD_MONTHS(TRUNC(SYSDATE, 'Q'), 3);
    
  4. 查询工作日(排除周末)

    SELECT * FROM table_name 
    WHERE TO_CHAR(date_column, 'D') NOT IN ('1', '7');
    

这些查询语句涵盖了Oracle中大部分常用的时间相关操作,可以根据实际需求进行调整和组合使用。