2012-03-08 153 views
3

Oracle(10g)是否在此进行适当的TIME比较,还是需要转换为小数时间,然后进行比较?例如,Oracle时间比较

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

谢谢。

+1

这只是比较两个字符串。那甚至执行?它既不是SQL,也不是PL/SQL。尝试像这样:'IF SYSDATE <= TRUNC(SYSDATE)+(15/24)THEN ...' – 2012-03-08 21:37:48

+0

如果你的意思是“时间必须是* *之前或之前* 3pm”,那么你需要“<= '15: 00:00' ”。如果你的意思是“时间必须在* 3pm之前”,那么你可以完成“TO_CHAR(sysdate,'HH24')<'15'” – 2013-05-23 13:24:02

回答

4

您不能在if语句中执行select,但可以直接与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在我到达那里之前发布的日期比较!

+0

+1返回更广泛的选项:) – cagcowboy 2012-03-09 08:21:36

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

应该做的伎俩......

+0

确定:) [已经删除我的评论] – 2012-03-08 21:45:49

+0

+1在那里得到了什么是最后一部分我的答案! – Ben 2012-03-08 21:47:36

+0

5/8会更好(说数学专业);-) – 2012-03-09 00:36:40

1

使用下面的代码

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

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

与之相同:“如果TO_CHAR(SYSDATE,'HH24MI')在V1_TIME和V2_TIME之间”,但速度较慢 – 2013-05-23 13:06:35