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

StackOverflow https://stackoverflow.com/questions/177956

質問

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

  • 結果のNULL以外の値はすべて TRUE です
  • 結果のnull値は FALSE です
役に立ちましたか?

解決

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

これは、CASE WHENを使用して、比較に使用できる値を生成できるということです。

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

他のヒント

使用する必要はありません...次の場合:

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

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

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

このようになると思います

実際には、ISNULLは、値がNULLの場合は0である必要がある場合があります

戻り値として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

トマラックはより普遍的ですが、どのデータ型でも動作します

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

isnull(column - column + 1, 0) != 0

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

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

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

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

SELECT NVL2(nullableColumn, 1, 0) FROM someTable

NVL2(value、ifNotNull、ifNull)は、 value がnullでない場合は ifNotNull を返し、 ifNull それ以外の場合。

通常、使用1の場合、それはtrueであり、その他の場合はtrueであることを意味します。

だから:

SELECT  IsDefault = CASE WHEN IsDefault = 1 THEN 'true' ELSE 'false' END
FROM table
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top