2017-12-26 6 views
0

は私がしようとした:Oracle SQLの列にブール型がありますか?

select 1>2 from dual; 

が、得た:

ORA-00923: FROM keyword not found where expected 

OracleのSQLの列式のブール型はありますか?

私が行うことができる:私はSIGN機能を試してみました...

UPDATE

select case when 1>2 then 'T' else 'F' end from dual; 

は、もともと私は日付フィールドを比較しようとしましたが、私が見つけた最も簡単な方法は、違いを取得し、署名することになりましたベンダー固有の拡張機能であるかどうかわかりません:

select SIGN(1-2) from dual; 
select SIGN(DATE '2017-01-02' - DATE '2017-02-12') from dual; 

しかし、このトリックは機能しませんまたは文字列...

+1

いいえ、ブール型はありません。 'char()'や小さな整数を使うことができます。 –

+1

1と0のchar(1)が最適です。 – Adam

+0

私は2つの値の比較の結果を表現する方法を探しています。私は "ブール"型のカラムを作ることには興味がありません。 – gavenkoa

答えて

3

いいえありません。はい/いいえと同様に0と1を使用できます。例えば

select case when (any_logical_condition_here) then 1 else 0 end as my_col 
from .... 
where .... 

:あなたは何かが真と0、それが偽の場合であれば、結果1を取得する必要がある場合は

3

は、あなたがcase表現を使用することができます

select case when 1 > 2 then 1 else 0 end as bool_result 
from dual; 

          BOOL_RESULT 
--------------------------------------- 
             0 

NOTEをしかし、 "ブール"はTRUE/FALSEロジックを厳密に指し、UNKNOWNの場所はありません。 nullを扱うときは、SQLで必要とするように、3値のロジックが必要です。上記のような式caseは、論理条件がtrueの場合は1、それ以外の場合は0となります。 1 > nullで試してください。真理値はUNKNOWNです。caseの式は0を返します。

+0

ブール値は確かに3価です:['True'、' False'、 'FileNotFound'(link)](https://thedailywtf.com/articles/What_Is_Truth_0x3f_) – APC

関連する問題