ORACLE中当前时间大于等于from时间和当前时间小于等于时间的条件

Condition for current time greater than or equal to from time and current time less than or equal to time in ORACLE

由于使用 TO_CHAR(),条件不工作,但如何提取时间?以下是我的查询:

SELECT *
  FROM SUPPLY_TIMING
 WHERE TO_CHAR (SYSDATE, 'HH:Mi') >= TO_CHAR (FROM_TIME, 'HH:Mi')
       AND TO_CHAR (SYSDATE, 'HH:Mi') <= TO_CHAR (TO_TIME, 'HH:Mi')

看来您只对时间感兴趣,对日期部分不感兴趣。假设 FROM_TIMETO_TIME 的数据类型是 DATETIMESTAMP 你可以这样做:

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

乍一看,我猜是您的格式掩码导致了问题。 HH 组件将为您提供十二小时格式的小时数,因此下午 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')