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

发布于 2024-07-07 01:01:04 字数 160 浏览 9 评论 0原文

在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(11

等往事风中吹 2024-07-14 01:01:04

假设您想要 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 更通用,因为它可以处理任何数据类型

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

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

so then you can use it whenever you need by simply calling

select dbo.isNotNull(myIntColumn) from myTable

The answer provided by Tomalak is more universal though as it would work with any data type

私藏温柔 2024-07-14 01:01:04
SELECT 
    CASE
        WHEN thevalue IS NULL THEN 0
        ELSE 1
    END AS newVal
FROM .... (rest of select)

我认为它是这样的

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

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

I think it goes something like this

Actually, the ISNULL, may need to be WHEN thevalue IS NULL THEN 0

对风讲故事 2024-07-14 01:01:04

您可能想要对结果进行 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.

稀香 2024-07-14 01:01:04

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

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

SELECT 
    CASE WHEN ValueColumn IS NULL THEN 'FALSE' ELSE 'TRUE' END BooleanOutput 
FROM 
    table 

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:

SELECT 
    CASE WHEN ValueColumn IS NULL THEN 'FALSE' ELSE 'TRUE' END BooleanOutput 
FROM 
    table 
想你只要分分秒秒 2024-07-14 01:01:04

无需使用 case...when:

select (column_name is not null) as result from table_name;

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

No need to use case... when:

select (column_name is not null) as result from table_name;

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.

冷血 2024-07-14 01:01:04
isnull(column - column + 1, 0) != 0
isnull(column - column + 1, 0) != 0
终难遇 2024-07-14 01:01:04

在 Oracle 中,假设您使用 0 表示 false,1 表示 true: -

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

您也可以使用 CASE 语法来编写此内容,但上面的内容在 Oracle 中是惯用的。 DECODE 有点像 switch/case; 如果 col 为 NULL,则返回 0,否则返回 1。

In Oracle, assuming you use 0 for false and 1 for true:-

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

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.

甜是你 2024-07-14 01:01:04

通常当使用1时,表示为真,否则表示其他情况。

所以:

SELECT  IsDefault = CASE WHEN IsDefault = 1 THEN 'true' ELSE 'false' END
FROM table

Usually when use 1, it means is true and else in other case.

So:

SELECT  IsDefault = CASE WHEN IsDefault = 1 THEN 'true' ELSE 'false' END
FROM table
千纸鹤带着心事 2024-07-14 01:01:04

我们可以检查是否为 null 返回“False”,否则返回“True”

SELECT IIF(ISNULL(ColumnName<Nullable>, 'true')='false', 'true', 'false') ;


SELECT IIF(ISNULL(Email, 'true')='false', 'true', 'false') from Employee ;

We can check if is null return "False" else return "True"

SELECT IIF(ISNULL(ColumnName<Nullable>, 'true')='false', 'true', 'false') ;


SELECT IIF(ISNULL(Email, 'true')='false', 'true', 'false') from Employee ;
挽心 2024-07-14 01:01:04

我所知道的 Oracle 最短的一个:

SELECT NVL2(nullableColumn, 1, 0) FROM someTable

如果 value 不为 null,NVL2(value, ifNotNull, ifNull) 返回 ifNotNull,并且 ifNull 否则。

The shortest one I know for Oracle:

SELECT NVL2(nullableColumn, 1, 0) FROM someTable

NVL2(value, ifNotNull, ifNull) returns ifNotNull if the value is not null, and ifNull otherwise.

羞稚 2024-07-14 01:01:04

该语法有效,但我必须弄清楚如何将其放入我的查询中。
如果可以的话,我想分享一个有关如何适应扩展查询的示例:

select count(*) as count, inventory,
CASE WHEN inventory = 0 THEN 'empty' ELSE 'not empty' END as InventoryStatus
from mytable group by count, inventory

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:

select count(*) as count, inventory,
CASE WHEN inventory = 0 THEN 'empty' ELSE 'not empty' END as InventoryStatus
from mytable group by count, inventory
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文