检查PLSQL中的时间是否介于两次之间

时间:2015-03-05 12:38:00

标签: plsql plsqldeveloper

我正在尝试在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之间

3 个答案:

答案 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;