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

Tho*_*att 34 sql null boolean type-conversion

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

  • 任何非空值为TRUE的结果
  • 任何空值是的结果

Tom*_*lak 53

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

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

SELECT 
    CASE WHEN ValueColumn IS NULL THEN 'FALSE' ELSE 'TRUE' END BooleanOutput 
FROM 
    table 
Run Code Online (Sandbox Code Playgroud)

  • @Tomalak:OP想要返回一个“bool”。由于没有真正的 bool 类型,您可以在 sql-server 中返回最接近的类型是“bit”。在大多数语言(如 C++、.NET 或 java)中,当您想要将其读取为“bool”而不进行转换时,这也是您必须使用的数据类型。所以这似乎是相关的。另外,由于标题要求在“int”和“bool”之间进行转换,因此未来的读者显示“CAST(CASE WHEN ValueColumn IS NULL THEN 0 ELSE 1 END AS bit) AS BooleanOutput”将会很有帮助。 (3认同)

cvk*_*cvk 19

无需使用案例...时:

select (column_name is not null) as result from table_name;
Run Code Online (Sandbox Code Playgroud)

对于所有非NULL字段,返回1,对于所有NULL字段,返回0,这与SQL中的布尔值一样接近.

  • 它可能适用于MySQL,但很多奇怪的"便利"语法适用于MySQL,而不是在其他地方运行. (3认同)
  • @Lette:'(column_name IS NULL)'和'(column_name IS NOT NULL)'都没有产生任何值.它们只能用作布尔表达式,如CASE WHEN [expression] THEN'true-value'ELSE'false-value'END (3认同)

mat*_*ant 5

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

我认为它是这样的

实际上,ISNULL,可能需要是 WHEN thevalue IS NULL THEN 0