在SQL查询中将int或null转换为boolean值的最佳方法是什么,例如:
答案 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