SQLクエリでintまたはnullをブール値に変換する最良の方法は何ですか?
-
05-07-2019 - |
質問
次のような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