我希望有一条SELECT语句,如果没有从数据库返回任何行,它将返回指定的默认值。

我们可以使用UNION来获得所需的结果,例如以下问题:“ 如何为不返回任何行的查询设置默认行? ”,但这会提供额外的结果行。

例:

SELECT a 
    from TBL_TEST 
UNION 
SELECT 0 
    FROM DUAL

是否有更好的方法或标准的SQL方法可以在多个数据库引擎之间移植?

===============>>#1 票数:6

SELECT ifnull(a,20) FROM TBL_TEST 

如果a为null,则选择20;否则选择a(在mysql中,不确定其他)

===============>>#2 票数:5

对于便携式解决方案,如何:

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

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

您将在使用不同名称的数据库系统(例如SQL Server或DB2)中创建一个DUAL表。

===============>>#3 票数:1

MySQL具有DEFAULT函数,但是我不确定它的标准性或广泛支持性。

===============>>#4 票数:1

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 

===============>>#5 票数:1

在Oracle中:

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

===============>>#6 票数:1

在SQL SERVER 2008 R2中:当值为NULL时

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

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

===============>>#7 票数:1

使用COALESCE()将空值列转换为其默认值,例如

从TBL_TEST选择合并(a,0)

===============>>#8 票数:1

在,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

一切正常...

  ask by Rong Nguyen translate from so

未解决问题?本站智能推荐: