本人通过ODAC链接了一个ORACLE数据库。
里面有一个字段DTRQ是systimestamp类型,我想查询数据是系统时间最新的30分钟以内的数据,下面的查询是否正确呢?不对的话又该如何写呢?我现在没法测试,请教各位高手了,谢谢大家!select * from QB_ORACLE
where DTRQ between (sysdate-30/60/24) and sysdate;DTRQ是systimestamp类型,想查询最新的30分钟以内的数据

解决方案 »

  1.   

    或者:
    where to_char(DTRQ,'yyyy-mm-dd HH24-mi-ss') 
     between to_char((sysdate-30/60/24),'yyyy-mm-dd HH24-mi-ss') 
     and to_char(sysdate,'yyyy-mm-dd HH24-mi-ss');
      

  2.   

    SELECT *
      FROM QB_ORACLE
     WHERE DTRQ BETWEEN systimestamp - 30 / 1440 AND systimestamp;
      

  3.   

    SQL> select systimestamp, systimestamp+numtodsinterval(1/24, 'DAY')   from dual;
     
    SYSTIMESTAMP                                                                     SYSTIMESTAMP+NUMTODSINTERVAL(1
    -------------------------------------------------------------------------------- --------------------------------------------------------------------------------
    16-6月 -11 09.57.45.989000 上午 +08:00                                           16-6月 -11 10.57.45.989000000 上午 +08:00
     
    SQL> 
      

  4.   

    直接对timestamp类型进行数字加减貌似会转换成date数据
      

  5.   

    感谢6楼7楼!在工作中我碰到这样一个问题,session表需要用到timestamp的字段,在进行timestamp字段更新时出现了为题,比如需要对session的有效期增加1小时。  采用 systimestamp + 1/24 会丢失秒后的精度,感觉增加之后就变成了date型的样子。经过研究发现oracle 有个函数叫NUMTODSINTERVAL ,可以解决这个问题。下面两个例子说明如何使用这个函数  增加一小时  SELECT to_char(systimestamp + NUMTODSINTERVAL(1,'hour'),'yyyy-mm-dd HH24:mi:ss:ff'), to_char(systimestamp,'yyyy-mm-dd HH24:mi:ss:ff') FROM dual;  增加一分钟  SELECT to_char(systimestamp + NUMTODSINTERVAL(1,'minut'),'yyyy-mm-dd HH24:mi:ss:ff'), to_char(systimestamp,'yyyy-mm-dd HH24:mi:ss:ff') FROM dual;  对numtodesignterval的原版解释如下:  NUMTODSINTERVAL converts n to an INTERVAL DAY TO SECOND literal. The argument n can be any NUMBER value or an expression that can be implicitly converted to a NUMBER value. The argument interval_unit can be of CHAR, VARCHAR2, NCHAR, or NVARCHAR2 datatype. The value for interval_unit specifies the unit of n and must resolve to one of the following string values:  'DAY'  'HOUR'  'MINUTE'  'SECOND'  从解释上看,NUMTODSINTERVAL函数还可以处理day和sesond的值增加,(处理值减少只要添加“-”在数字前就可以啦),真是很强大的函数。另外如果需要增加的是年或者月,要选择NUMTOYMINTERVAL 函数了