Oracle Time Comparisons

时间:2012-03-08 21:35:53

标签: sql oracle date-arithmetic to-char

Oracle(10g)在这里进行了适当的TIME比较,还是需要转换为十进制时间然后进行比较?如,

IF (SELECT TO_CHAR(sysdate,'HH24:MI:SS') from dual) <= '15:00'
THEN (...)

感谢。

3 个答案:

答案 0 :(得分:10)

IF (sysdate <= trunc(sysdate)+15/24)
THEN (...)

应该做的伎俩...

答案 1 :(得分:4)

您无法在select语句中执行if,但可以直接与sysdate进行比较。如果你这样做,那么使用数字而不是依赖隐式转换可能会更好。你也不需要额外的分钟等等。

begin

   if to_number(to_char(sysdate,'HH24')) <= 15 then
      -- do something
   end if;

end;

如果您确实想要使用分钟,那么通过将其转换为不带冒号的字符串,您可以进行更直接的比较。只要日期/时间以24小时格式转换而没有额外内容,反之,年,月,日,小时等比较将始终准确,例如。

begin

   if to_char(sysdate,'HH24MI') <= '1515' then
      -- do something
   end if;

end;

然而,在我到达那里之前,@cagcowboy刚刚发布的日期比较通常最好!

答案 2 :(得分:1)

使用以下代码

SELECT TO_CHAR(SYSDATE, 'HH24MI') INTO V_SYS_TIME FROM DUAL;

IF V_SYS_TIME BETWEEN V1_TIME AND V2_TIME THEN 
(....)