次のように、SQLクエリでintまたはnullをブール値に変換する最良の方法は何ですか?
- 結果では、null 以外の値はすべてTRUEです
- 結果のnull 値はFALSEです
次のように、SQLクエリでintまたはnullをブール値に変換する最良の方法は何ですか?
私の知る限り (間違っていたら訂正してください)、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 が必要な場合があります WHEN thevalue IS NULL THEN 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
Tomalakが提供する答えは、どのデータ型でも機能するため、より普遍的です。
結果のConvert(BIT、Value)を実行することをお勧めします。何かSQLが、値がブール値ではないというエラーを返すためです。
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 を使用する場合は true を意味し、そうでない場合はそれ以外を意味します。
そう:
SELECT IsDefault = CASE WHEN IsDefault = 1 THEN 'true' ELSE 'false' END
FROM table
Oracleについて私が知っている最短のもの:
SELECT NVL2(nullableColumn, 1, 0) FROM someTable
NVL2(value, ifNotNull, ifNull)
がnull でないifNotNull
場合は戻り、そうでない場合は戻ります。value
ifNull