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

Sql ORACLE中当前时间大于或等于from time和当前时间小于或等于time的条件,sql,oracle,oracle11g,date-arithmetic,Sql,Oracle,Oracle11g,Date Arithmetic,由于使用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') 选择* 从供给到时间 WHERE TO_CHAR(SYSDATE,'HH:Mi')

由于使用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')
选择*
从供给到时间
WHERE TO_CHAR(SYSDATE,'HH:Mi')>=TO_CHAR(FROM_TIME,'HH:Mi'))

对于_CHAR(SYSDATE,'HH:Mi')来说,您似乎只对时间感兴趣,而对日期部分不感兴趣。假设
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

乍一看,我猜是您的格式掩码导致了问题。
HH
组件将以12小时格式为您提供小时数,因此1pm将返回为
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')
选择*
从供给到时间
WHERE TO_CHAR(SYSDATE,'HH24:Mi')>=TO_CHAR(FROM_TIME,'HH24:Mi'))
和TO_CHAR(SYSDATE,'HH24:Mi')