在SQL查询中将int或null转换为boolean值的最佳方法是什么?

时间:2008-10-07 11:02:22

标签: sql null boolean type-conversion

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

  • 结果中的任何非空值 TRUE
  • 结果
  • 中的任何空值 FALSE

10 个答案:

答案 0 :(得分:48)

据我所知(如果我错了,请纠正我),SQL中没有文字布尔值的概念。您可以将表达式计算为布尔值,但不能输出它们。

这就是说,您可以使用CASE WHEN生成可用于比较的值:

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

答案 1 :(得分:17)

无需使用案例......时间:

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

对于所有非NULL的字段,返回1;对于所有NULL字段,返回0,这与在SQL中可以获得布尔值一样接近。

答案 2 :(得分:4)

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

我觉得它就是这样的

实际上,ISNULL可能需要在值为空时为0

答案 3 :(得分:3)

假设您想要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提供的答案更具普遍性,因为它适用于任何数据类型

答案 4 :(得分:2)

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

答案 5 :(得分:1)

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

答案 6 :(得分:1)

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

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

您也可以使用CASE语法编写此内容,但上述内容在Oracle中是惯用的。 DECODE有点像开关/盒子;如果col为NULL则返回0,否则返回1.

答案 7 :(得分:0)

我认识的最短的Oracle:

SELECT NVL2(nullableColumn, 1, 0) FROM someTable
如果NVL2(value, ifNotNull, ifNull)不为空,

ifNotNull会返回value,否则会返回ifNull

答案 8 :(得分:0)

通常在使用1时,意味着是真的,否则在其他情况下。

所以:

SELECT  IsDefault = CASE WHEN IsDefault = 1 THEN 'true' ELSE 'false' END
FROM table

答案 9 :(得分:-1)

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

select count(*) as count, inventory,
CASE WHEN inventory = 0 THEN 'empty' ELSE 'not empty' END as InventoryStatus
from mytable group by count, inventory