Sql 无法提取正确的时间范围
执行此查询后Sql 无法提取正确的时间范围,sql,oracle,Sql,Oracle,执行此查询后 AND TRUNC(ITD.TRAN_DATE)>= '02-APR-18' AND TO_CHAR(ITD.TRAN_DATE,'HH24MI')>='0600' AND TRUNC(ITD.TRAN_DATE)<= '03-APR-18' AND TO_CHAR(TRUNC(ITD.TRAN_DATE+1),'HH24MI')<='0030' 和TRUNC(ITD.TRAN_DATE)>=“2018年4月2日” 和TO_CHAR(ITD.TRAN_DA
AND TRUNC(ITD.TRAN_DATE)>= '02-APR-18'
AND TO_CHAR(ITD.TRAN_DATE,'HH24MI')>='0600'
AND TRUNC(ITD.TRAN_DATE)<= '03-APR-18'
AND TO_CHAR(TRUNC(ITD.TRAN_DATE+1),'HH24MI')<='0030'
和TRUNC(ITD.TRAN_DATE)>=“2018年4月2日”
和TO_CHAR(ITD.TRAN_DATE,'HH24MI')>='0600'
还有TRUNC(ITD.TRAN_DATE)不确定你想要什么。也许是这样:
and to_char(itd.tran_date, 'YYYYMMDD-HH24MISS')
between '20180402-0600'
and '20180403-0030'
但是,如果是这样,并且该表有许多行,并且tran_date
是一个索引列,那么这可能会快得多:
and itd.tran_date
between to_date('20180402-0600','YYYYMMDD-HH24MI')
and to_date('20180403-0030','YYYYMMDD-HH24MI')
在您的问题中,假设日期格式为DD-MON-YY。就目前的环境而言,情况可能是这样,但可能并非总是如此。因此,使用to char或to date ondate
值或字符串是一种很好的做法。当我们截断一个日期时,我们删除了时间元素。因此,'HH24:MI'
的掩码将返回'00:00'
,这意味着无论ITD的实际时间成分如何,这将始终是真实的
AND TO_CHAR(TRUNC(ITD.TRAN_DATE+1),'HH24MI')<='0030'
和TO_CHAR(TRUNC(ITD.TRAN_日期+1),'HH24MI')=日期'2018-04-02'+(6/24)
和itd.tran_date当您与数字(包括日期)数据进行词汇(字符串)比较时,几乎总是会失败。此外,当您trunc
datetime时,时间部分将丢失。所以最后一个条件总是返回0000,所有条目的比较都成功。我这样做是为了在excel中用作参数。所以我无法添加额外的语句来只在12:30之前收集数据?
where itd.tran_date >= date '2018-04-02' + (6/24)
and itd.tran_date <= date '2018-04-03' + (1/48)