欢迎投稿

今日深度:

oracle查询一天前、几天前、几小时前、一小时前的数据以及恢复误删的数据,

oracle查询一天前、几天前、几小时前、一小时前的数据以及恢复误删的数据,


目录
  • 一.oracle查询一天前、几天前、几小时前、一小时前的数据
    • 例:
  • 二.恢复误删的数据
    • 步骤:
    • 例:恢复一天前误删除的用户(用户 “Tom”,“Jerry”)
  • 附:Oracle 查询某个时间之内的数据
    • 总结

      一.oracle查询一天前、几天前、几小时前、一小时前的数据

      语法:

      SELECT * FROM <table_name> AS OF TIMESTAMP (SYSDATE-<interval>);
      

      例:

      1.您想查询用户表(USER_INFO)一小时前的数据

      --一小时是一天的1/24 ,故<interval>参数为1/24,如果想查四小时前的数据,<interval>参数可以是4/24或1/6
      SELECT * FROM USER_INFO AS OF TIMESTAMP (SYSDATE-1/24);
      

      2.您想查询用户表(USER_INFO)一天前的数据

      SELECT * FROM USER_INFO AS OF TIMESTAMP (SYSDATE-1);
      

      3…您想查询用户表(USER_INFO)三天前的数据

      SELECT * FROM USER_INFO AS OF TIMESTAMP (SYSDATE-3);
      

      二.恢复误删的数据

      恢复误删的数据基于前面能否查询到历史数据,假设能够查到一天前的数据,就可通过下面语句恢复被删除的数据 (如果您觉得步骤不直观的话请您直接看例子吧)

      步骤:

      1.创建临时表并把误删的数据暂时存到临时表中

      CREATE TABLE TABNAME_TEMP AS SELECT * FROM TABNAME AS OF TIMESTAMP (SYSDATE-<interval>);
      

      2.把临时表的数据插入原表(被您误删数据的表)中

       -- SELECT * FROM TABNAME_TEMP 语句 可以带where条件,看您需要插入所有数据还是选择性插入
       INSERT INTO TABNAME SELECT * FROM TABNAME_TEMP ;
      

      3.删除临时表 (防止临时表占用数据库空间)

      DROP TABLE TABNAME_TEMP;--注意这里删除的是临时表,您刚刚创建的表,别删错了。
      

      例:恢复一天前误删除的用户(用户 “Tom”,“Jerry”)

      CREATE TABLE USER_INFO_TEMP AS SELECT * FROM USER_INFO AS OF TIMESTAMP (SYSDATE-1);
      INSERT INTO USER_INFO SELECT * FROM USER_INFO_TEMP where username in ('Tom','Jerry');
      DROP TABLE USER_INFO_TEMP;
      

      需要注意的是:误删的数据不一定能查询到,也不一定能找回,故在操作数据库时尽量小心操作

      例:在更新数据库表时一定带上where条件;删除数据之前先备份数据(尤其是生产环境或测试环境您不熟悉的表)

      附:Oracle 查询某个时间之内的数据

      //一月之内
      SELECT * FROM ESS.E_LOG WHERE E_LOG."ETime" BETWEEN sysdate-interval '7' month AND SYSDATE;
       
      SELECT * FROM ESS.E_LOG
      WHERE to_char(E_LOG."ETime",'yyyy-mm-dd hh24:mi:ss') between to_char(sysdate-225,'yyyy-mm-dd hh24:mi:ss') and to_char(sysdate,'yyyy-mm-dd hh24:mi:ss');
       
      //一周之内
      select * from ESS.E_LOG where E_LOG."ETime" > sysdate - interval '7' day;
       
       
      //一年之内
      select count(*) from ESS.E_LOG WHERE E_LOG."ETime" BETWEEN sysdate-interval '1' year AND SYSDATE;
       
      //sysdate获取的时间是Oracle数据库系统时间
      select sysdate from dual;

      总结

      到此这篇关于oracle查询一天前、几天前、几小时前、一小时前的数据以及恢复误删的数据的文章就介绍到这了,更多相关oracle查询某段时间之前的数据内容请搜索PHP之友以前的文章或继续浏览下面的相关文章希望大家以后多多支持PHP之友!

      您可能感兴趣的文章:
      • Oracle 数据库连接查询SQL语句
      • oracle 查询当天数据的sql条件写法
      • Oracle查询今天、昨天、本周、上周、本月、上月数据方式
      • oracle实现动态查询前一天早八点到当天早八点的数据功能示例

      www.htsjk.Com true http://www.htsjk.com/oracle/47712.html NewsArticle oracle查询一天前、几天前、几小时前、一小时前的数据以及恢复误删的数据, 目录 一.oracle查询一天前、几天前、几小时前、一小时前的数据 例: 二.恢复误删的数据 步骤: 例:恢复...
      评论暂时关闭