什么是最好的方式来转换一个int或空来布尔的价值在SQL query,使得:

  • 任何非空值 真的 在结果
  • 任何空值 在结果
有帮助吗?

解决方案

我的知识(正确的我,如果我错误),也没有一概念的字面boolean values in SQL.你可以拥有的表情评估对布尔的价值,但不能输出。

这就是说,您可以使用的情况下,当产生一个价值可以使用在一个比较:

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;

返回1的所有领域not NULL和0的所有领域,空,这是尽可能靠近你可以得到布尔在SQL。

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

我认为它是这样的

实际上,该函数,可能需要的时候发IS NULL然后0

假设你想0,1值作为回报,我们正在谈论整数,我会使用的逻辑规定的通过 应对 和包裹它的功能

create function dbo.isNotNull(@a int)
returns bit
as
begin
return isnull(@a-@a+1,0)
end

所以然后你可以用它当你需要通过简单调

select dbo.isNotNull(myIntColumn) from myTable

答复提供 Tomalak 更普遍,但因为它将与任何类型的数据

你可能想要做一个转换(位,值)的结果。因为东西SQL会返回一个错误的价值不是一个布尔。

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

在Oracle,假定使用0为虚假和1为真:-

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

你也可以写入这个情况下使用的语法,但上述习惯在Oracle。解码是一个有点像一个开关/情况;如果col is NULL然后返回0,否则1中。

最短的一个,我知道为Oracle:

SELECT NVL2(nullableColumn, 1, 0) FROM someTable

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

通常当使用1中,这意味着真正和他在其他情况。

所以:

SELECT  IsDefault = CASE WHEN IsDefault = 1 THEN 'true' ELSE 'false' END
FROM table
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top