请教:oracle中利用systimestamp字段查询30分钟内的数据

loin999 2011-06-16 09:06:50

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

select * from QB_ORACLE
where DTRQ between (sysdate-30/60/24) and sysdate;

DTRQ是systimestamp类型,想查询最新的30分钟以内的数据
...全文
704 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
loin999 2011-06-16
  • 打赏
  • 举报
回复
感谢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 函数了

minitoy 2011-06-16
  • 打赏
  • 举报
回复
直接对timestamp类型进行数字加减貌似会转换成date数据
minitoy 2011-06-16
  • 打赏
  • 举报
回复
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>
loin999 2011-06-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 tangren 的回复:]
SQL code

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

非常感谢
tangren 2011-06-16
  • 打赏
  • 举报
回复
SELECT *
FROM QB_ORACLE
WHERE DTRQ BETWEEN systimestamp - 30 / 1440 AND systimestamp;
loin999 2011-06-16
  • 打赏
  • 举报
回复
有谁帮忙看看不?
主要是自己现在没法测试,谢谢
loin999 2011-06-16
  • 打赏
  • 举报
回复
或者:
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');

quanhj 2011-06-16
  • 打赏
  • 举报
回复
不知 等待答案

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧