2012-03-08 7 views
3

Oracle(10g)はここで適切なTIME比較を行っていますか、または10進数に変換して比較する必要はありますか?例:Oracle Time Comparison

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

ありがとうございました。

+1

を使用しています。それも実行されますか?これはSQLでもPL/SQLでもありません。 'SYSDATE <= TRUNC(SYSDATE)+(15/24)THEN ...' –

+0

「時間は* 3pm前でなければならない」という場合は、「<= '15: 00:00 '" 「時間は* 3pm前でなければならない」という意味ならば、TO_CHAR(sysdate、 'HH24')<'15' " –

答えて

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

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

はトリックを行う必要があります...

+0

Ok :) [既に私のコメントを削除しました] –

+0

+1私の答えの最後の部分であったものの最初にそこにあった! – Ben

+0

5/8はもっと良いでしょう(数学専攻の話です);-) –

1

これはちょうど2つの文字列を比較し、次のコード

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

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

次のようになります。「IF TO_CHAR(SYSDATE、 'HH24MI')V1_TIMEとV2_TIMEとの間に」より遅い –