SYSDATE但指定时间

时间:2013-07-26 18:15:46

标签: sql oracle

我想说跟随,但用SYSDATE代替日期,但是我要调整的时间间隔。语法是什么?

SYSDATE+'0001'SYSDATE+'2359'之间的mydatefield

...
WHERE TO_CHAR( MOPACTIVITY.MOPNOTIFICATIONSENDAT , 'yyyy-mm-dd hh24:mi' )
  BETWEEN '2013-07-26 00:00:01' AND '2013-07-26 23:59:59'
;

3 个答案:

答案 0 :(得分:5)

Oracle中的 SYSDATE(或任何其他日期列)具有时间组件。因此,您需要将其剥离,然后添加小时/分钟/时间条件。

EG。说当前一天上午10:00到下午3:00,你可以说

date_column between (trunc(sysdate) + 10/24) and (trunc(sysdate) + 15/24)

Oracle日期算法在日级别上运行。所以,+1会在第二天给你,1/24会给你一个小时,10/24会给你当天的10:00 AM。

SQL> alter session set nls_date_format = 'DD-Mon-YYYY HH:MI:SS AM';

Session altered.

  1  select sysdate,
  2         trunc(sysdate),
  3         trunc(sysdate) + 10/24,
  4         trunc(sysdate) + 15/24
  5* from dual
SQL> /

SYSDATE                  26-Jul-2013 06:26:07 PM
TRUNC(SYSDATE)           26-Jul-2013 12:00:00 AM 
TRUNC(SYSDATE)+10/24     26-Jul-2013 10:00:00 AM 
TRUNC(SYSDATE)+15/24     26-Jul-2013 03:00:00 PM 

对于您的问题,您似乎对当前和第二天感兴趣,因此您可以尝试在剥离时间组件后直接向日期添加+ 1。

date_column >= trunc(sysdate) and 
date_column < trunc(sysdate)+1

答案 1 :(得分:1)

执行此操作的最佳方法是将MOPACTIVITY.MOPNOTIFICATIONSENDAT保留为DATE类型。这允许Oracle在列上发生索引时优化查询。我建议这样的事情:

WHERE MOPACTIVITY.MOPNOTIFICATIONSENDAT >= TRUNC(SYSDATE)
  AND MOPACTIVITY.MOPNOTIFICATIONSENDAT < TRUNC(SYSDATE) + 1

归结为大约等于今天的午夜&#34;并且&#34;比明天午夜少了#34;。

答案 2 :(得分:0)

我们也可以截断两个日期,然后比较结果

where TRUNC(MOPACTIVITY.MOPNOTIFICATIONSENDAT) = TRUNC(SYSDATE)

TRUNC从日期

中删除时间戳