本人通过ODAC链接了一个ORACLE数据库。 里面有一个字段DTRQ是systimestamp类型,我想查询数据是系统时间最新的30分钟以内的数据,下面的查询是否正确呢?不对的话又该如何写呢?我现在没法测试,请教各位高手了,谢谢大家!select * from QB_ORACLE where DTRQ between (sysdate-30/60/24) and sysdate;DTRQ是systimestamp类型,想查询最新的30分钟以内的数据
或者: 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');
SELECT * FROM QB_ORACLE WHERE DTRQ BETWEEN systimestamp - 30 / 1440 AND systimestamp;
SQL> select systimestamp, systimestamp+numtodsinterval(1/24, 'DAY') from dual;
感谢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 函数了
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');
FROM QB_ORACLE
WHERE DTRQ BETWEEN systimestamp - 30 / 1440 AND systimestamp;
SYSTIMESTAMP SYSTIMESTAMP+NUMTODSINTERVAL(1
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
16-6月 -11 09.57.45.989000 上午 +08:00 16-6月 -11 10.57.45.989000000 上午 +08:00
SQL>