select * from tbname where operdate>sysdate-30*/(24*60);
select * from tbname where operdate>sysdate-1/24;

解决方案 »

  1.   

    老大,是笔误吧,多了个“*”
    select * from tbname where operdate>sysdate-30/(24*60);
    select * from tbname where operdate>sysdate-1/24;我来解释一下吧:oracle的日期型变量是以“天”为单位来计算的。
      

  2.   

    需要解释一下??sysdate 取系统时间
    SQL> select sysdate from dual;SYSDATE
    -------------------
    2005-08-02 14:46:21已用时间:  00: 00: 00.40前一天:
    SQL> select sysdate-1 from dual;SYSDATE-1
    -------------------
    2005-08-01 14:46:46已用时间:  00: 00: 00.30
    SQL> 因此,30分钟前也就是sysdte-30/(24*60)
    --sorry,上面回复中写错了,多谢了一个*.
    一个小时前也就是sysdate-1/24;即(1/24天)
      

  3.   

    奇怪,刚才我发的帖子不见了,
    难道是被“冲”掉了?CSDN的数据库是用的oracle还是其他?
      

  4.   

    oracle 从8i开始就引入了时间间隔(interval)相关的函数;
    下面的2种方法结果是一样的:
    SQL> select sysdate + interval '2' hour from dual;SYSDATE+INTERVAL'2'HOUR
    -----------------------
    2005-8-2 17:29:13SQL> select sysdate + numtodsinterval(2,'hour') from dual;SYSDATE+NUMTODSINTERVAL(2,'HOU
    ------------------------------
    2005-8-2 17:30:38这里NUMTODSINTERVAL ( n , 'char_expr' )
    第一个参数是数字,第2个参数是从日期的英文拼写,从'day'到'second'.
    年月间隔用NUMTOYMINTERVAL()9i以后还引入了TO_DSINTERVAL ( char ['nlsparam'] )
    参数是从日到秒的字符串:'1 2:20:30' 表示1天2小时20分30秒的时间间隔
    TO_YMINTERVAL ( char ) 表示年月的间隔另外还引入了interval day to second 和  year to month 的数据类型
    interval_value_expr { DAY TO SECOND | YEAR TO MONTH }SQL> select sysdate - to_dsinterval('1 1:05:20') from dual;SYSDATE-TO_DSINTERVAL('11:05:2
    ------------------------------
    2005-8-1 14:33:48SQL> select sysdate - interval '1 1:05:20' day to second from dual;--相隔1天1小时5分20秒SYSDATE-INTERVAL'11:05:20'DAYT
    ------------------------------
    2005-8-1 14:34:18SQL> select sysdate - to_yminterval('2-2') from dual;--相隔2年2个月SYSDATE-TO_YMINTERVAL('2-2')
    ----------------------------
    2003-6-2 15:41:39