条件不起作用因为使用TO_CHAR(),但如何提取时间?以下是我的询问:
select sum (FREIGHT * STAX_RATE / 100)
from (select INVM.FREIGHT as FREIGHT , MAX(INVT.STAX_RATE) as STAX_RATE
from invm inner join INVT on INVM.I_B_NO = INVT.I_B_NO
where invm.i_b_dt between '04/01/2015 00:00:00' and '04/01/2015 00:00:00'
group by INVM.FREIGHT)
答案 0 :(得分:3)
看起来您只对时间感兴趣,但对日期部分不感兴趣。假设FROM_TIME
和TO_TIME
的数据类型为DATE
或TIMESTAMP
,您可以这样做:
select *
FROM SUPPLY_TIMING
WHERE EXTRACT(HOUR FROM SYSDATE) + EXTRACT(MINUTE FROM SYSDATE)/60
BETWEEN EXTRACT(HOUR FROM FROM_TIME) + EXTRACT(MINUTE FROM FROM_TIME)/60
AND EXTRACT(HOUR FROM TO_TIME) + EXTRACT(MINUTE FROM TO_TIME)/60
答案 1 :(得分:0)
乍一看,我的猜测是你的格式掩码是造成问题的原因。 HH
组件会以12小时格式为您提供时间,因此下午1点将返回01
,我认为如果您使用HH24
,则会获得13
,使字符串比较按预期工作:
SELECT *
FROM SUPPLY_TIMING
WHERE TO_CHAR (SYSDATE, 'HH24:Mi') >= TO_CHAR (FROM_TIME, 'HH24:Mi')
AND TO_CHAR (SYSDATE, 'HH24:Mi') <= TO_CHAR (TO_TIME, 'HH24:Mi')