在 SQL 查询中将 int 或 null 转换为布尔值的最佳方法是什么?
在 SQL 查询中将 int 或 null 转换为布尔值的最佳方法是什么,这样:
- 结果中任何非 null 值都是 TRUE
- 任何 null 值都是 FALSE > 在结果中
What is the best way to convert an int or null to boolean value in an SQL query, such that:
- Any non-null value is TRUE in the results
- Any null value is FALSE in the results
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(11)
假设您想要 0,1 值作为返回,并且我们正在讨论整数,我将使用 Torbjörn 并将其包装在函数中,
这样您就可以在任何时候使用它需要通过简单地调用
Tomalak 更通用,因为它可以处理任何数据类型
Assuming you want 0,1 value as a return, and that we are talking about integer I would use the logic specified by Torbjörn and wrap it in the function
so then you can use it whenever you need by simply calling
The answer provided by Tomalak is more universal though as it would work with any data type
我认为它是这样的
实际上,ISNULL,可能需要是 WHEN thevalue IS NULL THEN 0
I think it goes something like this
Actually, the ISNULL, may need to be WHEN thevalue IS NULL THEN 0
您可能想要对结果进行 Convert(BIT, Value)。 因为某些 SQL 会返回一个错误,指出该值不是布尔值。
You may want to do a Convert(BIT, Value) of your result. Because something SQL will return an error that the value is not a boolean.
据我所知(如果我错了,请纠正我),SQL 中没有文字布尔值的概念。 您可以将表达式计算为布尔值,但不能输出它们。
也就是说,您可以使用 CASE WHEN 生成可在比较中使用的值:
To my knowledge (correct me if I'm wrong), there is no concept of literal boolean values in SQL. You can have expressions evaluating to boolean values, but you cannot output them.
This said, you can use CASE WHEN to produce a value you can use in a comparison:
无需使用 case...when:
对于所有非 NULL 字段返回 1,对于所有 NULL 字段返回 0,这与 SQL 中的布尔值最接近。
No need to use case... when:
Returns 1 for all fields not NULL and 0 for all fields that are NULL, which is as close as you can get to booleans in SQL.
在 Oracle 中,假设您使用 0 表示 false,1 表示 true: -
您也可以使用 CASE 语法来编写此内容,但上面的内容在 Oracle 中是惯用的。 DECODE 有点像 switch/case; 如果 col 为 NULL,则返回 0,否则返回 1。
In Oracle, assuming you use 0 for false and 1 for true:-
You can also write this using the CASE syntax, but the above is idiomatic in Oracle. DECODE is a bit like a switch/case; if col is NULL then 0 is returned, else 1.
通常当使用1时,表示为真,否则表示其他情况。
所以:
Usually when use 1, it means is true and else in other case.
So:
我们可以检查是否为 null 返回“False”,否则返回“True”
We can check if is null return "False" else return "True"
我所知道的 Oracle 最短的一个:
如果
value
不为 null,NVL2(value, ifNotNull, ifNull)
返回ifNotNull
,并且ifNull 否则。
The shortest one I know for Oracle:
NVL2(value, ifNotNull, ifNull)
returnsifNotNull
if thevalue
is not null, andifNull
otherwise.该语法有效,但我必须弄清楚如何将其放入我的查询中。
如果可以的话,我想分享一个有关如何适应扩展查询的示例:
The syntax works, but I had to figure out how to place it in my query.
If OK, I'd like to share an example on how to fit into an extended query: