46

在 SQL 查询中将 int 或 null 转换为布尔值的最佳方法是什么,例如:

  • 结果中的任何非空值都是TRUE
  • 结果中的任何空值都是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

您可能想要对结果进行转换(BIT,值)。因为某些 SQL 将返回一个错误,即该值不是布尔值。

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

在 Oracle 中,假设您使用 0 表示假,使用 1 表示真:-

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

您也可以使用 CASE 语法来编写它,但以上在 Oracle 中是惯用的。DECODE 有点像开关/机箱;如果 col 为 NULL,则返回 0,否则返回 1。

于 2008-11-02T06:09:22.350 回答
0

我所知道的最短的甲骨文:

SELECT NVL2(nullableColumn, 1, 0) FROM someTable

NVL2(value, ifNotNull, ifNull)ifNotNull如果value不为空,则返回,ifNull否则返回。

于 2015-05-20T06:54:55.890 回答
0

通常使用 1 时,表示为真,否则为其他情况。

所以:

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

语法有效,但我必须弄清楚如何将它放在我的查询中。如果可以,我想分享一个关于如何适应扩展查询的示例:

select count(*) as count, inventory,
CASE WHEN inventory = 0 THEN 'empty' ELSE 'not empty' END as InventoryStatus
from mytable group by count, inventory
于 2019-12-09T15:21:55.920 回答