[英]What is the best way to convert an int or null to boolean value in an SQL query?
在 SQL 查詢中將 int 或 null 轉換為 boolean 值的最佳方法是什么,這樣:
據我所知(如果我錯了,請糾正我),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
您可能想要對結果進行 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.