簡體   English   中英

在select語句中設置默認值(不使用UNION語句)

[英]Set default value in select statement(not use UNION statement)

我希望有一條SELECT語句,如果沒有從數據庫返回任何行,它將返回指定的默認值。

我們可以使用UNION來獲得所需的結果,例如以下問題:“ 如何為不返回任何行的查詢設置默認行? ”,但這會提供額外的結果行。

例:

SELECT a 
    from TBL_TEST 
UNION 
SELECT 0 
    FROM DUAL

是否有更好的方法或標准的SQL方法可以在多個數據庫引擎之間移植?

SELECT ifnull(a,20) FROM TBL_TEST 

如果a為null,則選擇20;否則選擇a(在mysql中,不確定其他)

對於便攜式解決方案,如何:

select coalesce(a, 0)
    from TBL_TEST 
    right outer join DUAL on null is null

之所以使用COALESCE函數,是因為它比NVL()或IFNULL()更可移植。

您將在使用不同名稱的數據庫系統(例如SQL Server或DB2)中創建一個DUAL表。

MySQL具有DEFAULT函數,但是我不確定它的標准性或廣泛支持性。

MySQL IFNULL is like oracle's NVL function 
MySQL IFNULL() takes two expressions and if the first expression is not NULL, it returns the first expression. Otherwise it returns the second expression.
Syntax 

IFNULL(expression1, expression2); 

SELECT IFNULL(a,<default value>) from TBL_TEST 

在Oracle中:

select nvl(a, 0)
from DUAL left join TBL_TEST on null is null

在SQL SERVER 2008 R2中:當值為NULL時

SELECT ISNULL(a,<Default Value>) from TBL_TEST

e.g. SELECT ISNULL(a,0) from TBL_TEST

使用COALESCE()將空值列轉換為其默認值,例如

從TBL_TEST選擇合並(a,0)

在,SQL SERVER 2008 R2中:當空字符串時

SELECT ISNULL(NULLIF(a,<Empty String>)<Default Value>) from TBL_TEST

e.g. SELECT ISNULL(NULLIF(a,'')0) from TBL_TEST

一切正常...

暫無
暫無

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

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