8

2つの数値を比較したいと思います。すなわち1と2を取りましょう。

次のクエリを作成しようとしましたが、期待どおりに機能しません(Toadによると:ORA-00923:FROMキーワードが期待どおりに見つかりません):

SELECT 1 > 2 from dual

DECODEはSwitchケースのようなものですが、式の評価(つまり数値比較)の結果を選択リストに入れるにはどうすればよいですか?

SELECT LISTの式の代わりに関数を使用する解決策を見つけました:すなわち

select DECODE(SIGN(actual - target)
           , -1, 'NO Bonus for you'
           , 0,'Just made it'
           , 1, 'Congrats, you are a winner')
from some_table

もっとエレガントな方法はありますか?

また、2つの日付を比較するにはどうすればよいですか?

4

4 に答える 4

8

sqlにはブール型はありません(少なくともoracleには)。
あなたが使用することができますcase

SELECT CASE when 1 > 2 THEN 1 ELSE 0 END FROM dual

しかし、あなたの解決策(デコード)も良いです、ここを読んでください

于 2012-05-08T08:37:57.550 に答える
6

SIGN()関数は、a> b、a = b、およびa <bをテストする場合に関心のある(不)等式を分類するためのおそらく最良の方法であり、日付-日付または数値を受け入れます。-引数としての数値。

デコードではなく、Caseステートメントを優先的に使用します。

Select
  case sign(actual-target)
    when -1 then ...
    when  0 then ...
    when  1 then ...
  end
于 2012-05-08T11:01:04.243 に答える
1

2つの日付をSQLで比較できます

方法(1):

SELECT   TO_DATE('01/01/2012') - TO_DATE('01/01/2012')  
FROM DUAL--gives zero

方法(2):

SELECT CASE 

when MONTHS_BETWEEN('01/01/2012','01/01/2010') > 0 
THEN 'FIRST IS GREATER' 
ELSE 'SECOND IS GREATER OR EQUAL'  END

 FROM dual

申し訳ありませんが、コードをフォーマットできません。フォーマットツールバーが消えました。誰かが理由を知っていますか?

于 2012-05-08T08:43:44.657 に答える
1
SELECT (CASE 
WHEN (SIGN(actual - target) > 0 ) THEN 
 'NO Bonus for you' 
ELSE 
 'Just made it'  END)
FROM dual
于 2012-05-08T16:53:39.757 に答える