我想有一个SELECT语句,如果没有从数据库返回任何行,它将返回指定的默认值。
我们可以使用UNION来获得所需的结果,例如:“How to set a default row for a query that returns no rows?”,但这会产生额外的结果行。
示例:
SELECT a
from TBL_TEST
UNION
SELECT 0
FROM DUAL
是否有更好的方法或标准的SQL方法可以跨多个数据库引擎移植?
答案 0 :(得分:6)
SELECT ifnull(a,20) FROM TBL_TEST
如果a为null则选择20,否则选择a(在mysql中,不确定其他人)
答案 1 :(得分:5)
对于便携式解决方案,如何:
select coalesce(a, 0)
from TBL_TEST
right outer join DUAL on null is null
此处使用COALESCE功能,因为它比NVL()或IFNULL()更便携。
您将在数据库系统中创建一个使用不同名称的DUAL表,例如SQL Server或DB2。
答案 2 :(得分:1)
MySQL具有DEFAULT
功能,但我不确定它的标准或广泛支持。
答案 3 :(得分: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
答案 4 :(得分:1)
在Oracle中:
select nvl(a, 0)
from DUAL left join TBL_TEST on null is null
答案 5 :(得分:1)
In,SQL SERVER 2008 R2:当值为空时
SELECT ISNULL(a,<Default Value>) from TBL_TEST
e.g. SELECT ISNULL(a,0) from TBL_TEST
答案 6 :(得分:1)
使用COALESCE()将空值列转换为其默认值,例如
从TBL_TEST中选择合并(a,0)
答案 7 :(得分:1)
In,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
这很好......