web-dev-qa-db-ja.com

SQLクエリでintまたはnullをブール値に変換する最良の方法は何ですか?

SQLクエリでintまたはnullをブール値に変換する最良の方法は次のとおりです。

  • Null以外の値は、結果では[〜#〜] true [〜#〜]です
  • Null値は、結果では[〜#〜] false [〜#〜]です
31
Thomas Bratt

私の知る限り(間違っている場合は修正してください)、SQLにはリテラルブール値の概念はありません。ブール値に評価される式を持つことはできますが、出力することはできません。

つまり、CASE WHENを使用して、比較に使用できる値を生成できます。

SELECT 
    CASE WHEN ValueColumn IS NULL THEN 'FALSE' ELSE 'TRUE' END BooleanOutput 
FROM 
    table 
50
Tomalak

ケースを使用する必要はありません...

select (column_name is not null) as result from table_name;

NULL以外のすべてのフィールドに対して1を返し、NULLのすべてのフィールドに対して0を返します。これは、SQLのブール値に到達するのに近い値です。

17
cvk
SELECT 
    CASE
        WHEN thevalue IS NULL THEN 0
        ELSE 1
    END AS newVal
FROM .... (rest of select)

こんな感じになると思う

実際には、ISNULLは、値IS NULL THEN 0

4
mattlant

戻り値として0,1の値が必要であり、整数について話していると仮定すると、 Torbjörn で指定されたロジックを使用して関数にラップします

create function dbo.isNotNull(@a int)
returns bit
as
begin
return isnull(@a-@a+1,0)
end

そのため、必要なときにいつでも呼び出すことができます

select dbo.isNotNull(myIntColumn) from myTable

Tomalak によって提供される答えは、どのデータ型でも機能するため、より普遍的です

4
kristof

結果のConvert(BIT、Value)を実行できます。何かのSQLは値がブール値ではないというエラーを返すためです。

3
Patrick Parent
isnull(column - column + 1, 0) != 0

Oracleでは、falseに0を、trueに1を使用すると仮定します。

SELECT DECODE( col, NULL, 0, 1) FROM ...

CASE構文を使用してこれを書くこともできますが、上記はOracleでは慣用的です。 DECODEはスイッチ/ケースに少し似ています。 colがNULLの場合、0が返され、それ以外の場合は1が返されます。

1
WW.

通常、1を使用する場合、それは真であり、それ以外の場合は意味します。

そう:

SELECT  IsDefault = CASE WHEN IsDefault = 1 THEN 'true' ELSE 'false' END
FROM table
0
David Castro

私がOracleで知っている最も短いもの:

_SELECT NVL2(nullableColumn, 1, 0) FROM someTable
_

NVL2(value, ifNotNull, ifNull)は、ifNotNullがnullでない場合はvalueを返し、そうでない場合はifNullを返します。

0
PL_kolek