我正在尝试在plsql中检查时间是否介于两次之间。解决任何人?
DECLARE
vTime VARCHAR2(10) DEFAULT '18:00:00';
vFrom VARCHAR2(10) DEFAULT '17:00:00';
vUntil VARCHAR2(10) DEFAULT '09:00:00';
BEGIN
IF TO_DATE(vTime,'HH24:MI:SS') BETWEEN TO_DATE(vFrom,'HH24:MI:SS') AND TO_DATE(vUntil,'HH24:MI:SS')
THEN
DBMS_OUTPUT.PUT_LINE(vTime||' is between '||vFrom||' and '||vUntil);
ELSE
DBMS_OUTPUT.PUT_LINE(vTime||' is NOT between '||vFrom||' and '||vUntil);
END IF;
END;
结果:
18:00:00不在17:00:00至09:00:00之间
答案 0 :(得分:1)
问题是错误的,因为日期是例如同一天
TO_DATE(vTime,'HH24:MI:SS') = 01/03/2015 18:00:00
TO_DATE(vFrom,'HH24:MI:SS') = 01/03/2015 17:00:00
TO_DATE(vUntil,'HH24:MI:SS') = 01/03/2015 09:00:00
所以 01/03/2015 18:00:00 并不是 01/03/2015 17:00:00 和 01/03/2015 9点00分○○秒强>
关于我冒犯的过程的信息很少:
IF TO_DATE(vTime,'HH24:MI:SS') BETWEEN TO_DATE(vFrom,'HH24:MI:SS') AND (TO_DATE(vUntil,'HH24:MI:SS')+1)
答案 1 :(得分:0)
使用BETWEEN比较值时,第一个值应小于第二个值。在这里,第一个值更大,所以你得到FALSE是正确的。
如果您从今天起17:00:00,从明天起9:00:00,您的结果将为TRUE,因为今天18:00:00实际上是在这些之间。
答案 2 :(得分:0)
这对我有用
FUNCTION time_withing_range(b_time IN VARCHAR2
,b_start IN VARCHAR2
,b_end IN VARCHAR2)
RETURN BOOLEAN
IS
vResult BOOLEAN DEFAULT FALSE;
BEGIN
IF TO_DATE(b_start,'HH24:MI') < TO_DATE(b_end,'HH24:MI')
THEN
IF TO_DATE(b_time,'HH24:MI') >= TO_DATE(b_start,'HH24:MI')
AND TO_DATE(b_time,'HH24:MI') <= TO_DATE(b_end,'HH24:MI')
THEN
vResult := TRUE;
END IF;
ELSE
IF TO_DATE(b_time,'HH24:MI') >= TO_DATE(b_start,'HH24:MI')
AND TO_DATE(b_time,'HH24:MI') <= TO_DATE('23:59','HH24:MI')
THEN
vResult := TRUE;
END IF;
IF TO_DATE(b_time,'HH24:MI') >= TO_DATE('00:00','HH24:MI')
AND TO_DATE(b_time,'HH24:MI') <= TO_DATE(b_end,'HH24:MI')
THEN
vResult := TRUE;
END IF;
END IF;
RETURN vResult;
EXCEPTION
WHEN OTHERS
THEN
RAISE;
END;