46

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

  • 結果では、null 以外の値はすべてTRUEです
  • 結果のnull 値はFALSEです
4

10 に答える 10

64

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

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

SELECT 
    CASE WHEN ValueColumn IS NULL THEN 'FALSE' ELSE 'TRUE' END BooleanOutput 
FROM 
    table 
于 2008-10-07T11:11:52.103 に答える
24

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

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

NULL ではないすべてのフィールドに対して 1 を返し、NULL であるすべてのフィールドに対して 0 を返します。これは、SQL のブール値に最も近い値です。

于 2008-10-07T11:11:17.427 に答える
5
SELECT 
    CASE
        WHEN thevalue IS NULL THEN 0
        ELSE 1
    END AS newVal
FROM .... (rest of select)

このような流れだと思います

実際には、ISNULL が必要な場合があります WHEN thevalue IS NULL THEN 0

于 2008-10-07T11:09:30.237 に答える
4

戻り値として 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が提供する答えは、どのデータ型でも機能するため、より普遍的です。

于 2008-10-07T13:20:40.940 に答える
3

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

于 2008-10-07T11:55:00.690 に答える
2
isnull(column - column + 1, 0) != 0
于 2008-10-07T11:06:27.187 に答える
1

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

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

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

于 2008-11-02T06:09:22.350 に答える
0

通常、1 を使用する場合は true を意味し、そうでない場合はそれ以外を意味します。

そう:

SELECT  IsDefault = CASE WHEN IsDefault = 1 THEN 'true' ELSE 'false' END
FROM table
于 2016-04-11T20:53:49.193 に答える
0

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

SELECT NVL2(nullableColumn, 1, 0) FROM someTable

NVL2(value, ifNotNull, ifNull)がnull でないifNotNull場合は戻り、そうでない場合は戻ります。valueifNull

于 2015-05-20T06:54:55.890 に答える