簡體   English   中英

在 SQL 查詢中將 int 或 null 轉換為 boolean 值的最佳方法是什么?

[英]What is the best way to convert an int or null to boolean value in an SQL query?

在 SQL 查詢中將 int 或 null 轉換為 boolean 值的最佳方法是什么,這樣:

  • 結果中的任何非空值都是TRUE
  • 結果中任何 null 值都是FALSE

據我所知(如果我錯了,請糾正我),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

假設您想要 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提供的答案更通用,因為它適用於任何數據類型

您可能想要對結果進行 Convert(BIT, Value) 轉換。 因為某些 SQL 會返回一個錯誤,即該值不是布爾值。

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

在 Oracle 中,假設您使用 0 表示假,使用 1 表示真:-

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

您也可以使用 CASE 語法編寫此代碼,但以上內容在 Oracle 中是慣用的。 DECODE 有點像開關/外殼; 如果 col 為 NULL,則返回 0,否則返回 1。

我們可以檢查 null 是否返回“False”,否則返回“True”

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


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

我所知道的 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

語法有效,但我必須弄清楚如何將它放在我的查詢中。 如果可以,我想分享一個關於如何適應擴展查詢的示例:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM