在 SQL 查询中将 int 或 null 转换为布尔值的最佳方法是什么,例如:
- 结果中的任何非空值都是TRUE
- 结果中的任何空值都是FALSE
在 SQL 查询中将 int 或 null 转换为布尔值的最佳方法是什么,例如:
据我所知(如果我错了,请纠正我),SQL 中没有文字布尔值的概念。您可以让表达式评估为布尔值,但不能输出它们。
这就是说,您可以使用 CASE WHEN 生成一个可以在比较中使用的值:
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;
为所有非 NULL 字段返回 1,为所有为 NULL 的字段返回 0,这与 SQL 中的布尔值尽可能接近。
SELECT
CASE
WHEN thevalue IS NULL THEN 0
ELSE 1
END AS newVal
FROM .... (rest of select)
我认为它是这样的
实际上,ISNULL,可能需要 WHEN thevalue IS NULL THEN 0
您可能想要对结果进行转换(BIT,值)。因为某些 SQL 将返回一个错误,即该值不是布尔值。
isnull(column - column + 1, 0) != 0
在 Oracle 中,假设您使用 0 表示假,使用 1 表示真:-
SELECT DECODE( col, NULL, 0, 1) FROM ...
您也可以使用 CASE 语法来编写它,但以上在 Oracle 中是惯用的。DECODE 有点像开关/机箱;如果 col 为 NULL,则返回 0,否则返回 1。
我所知道的最短的甲骨文:
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
语法有效,但我必须弄清楚如何将它放在我的查询中。如果可以,我想分享一个关于如何适应扩展查询的示例:
select count(*) as count, inventory,
CASE WHEN inventory = 0 THEN 'empty' ELSE 'not empty' END as InventoryStatus
from mytable group by count, inventory