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_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
组件将为您提供十二小时格式的小时数,因此下午 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')
由于使用 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_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
组件将为您提供十二小时格式的小时数,因此下午 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')