我正在SQL Server 2008数据库上执行SELECT语句。
SELECT Name, DOB, Address1, Address2, City, State, Zip
FROM Users
但是,如果上述任何列对于特定行恰好是空的,我想将值NA
放在列中。
通常会返回:
SMITH^JOHN, 1/1/1980, 5140 N 1ST ST, NULL, NOWHERE, WA, 98221
DOE^JANE, 5/5/1970, NULL, NULL, NULL, NULL, NULL
我想要归还的是:
SMITH^JOHN, 1/1/1980, 5140 N 1ST ST, NA, NOWHERE, WA, 98221
DOE^JANE, 5/5/1970, NA, NA, NA, NA, NA
但是,我不想实际更新数据库。我只希望SELECT
语句在结果为NULL
时返回此静态值。
答案 0 :(得分:17)
您想使用COALESCE功能。
SELECT
Name
, DOB
, COALESCE(Address1, 'NA')
, COALESCE(Address2, 'NA')
, COALESCE(City, 'NA')
, COALESCE(State, 'NA')
, COALESCE(Zip, 'NA')
FROM Users
答案 1 :(得分:5)
尝试:
ISNULL(expression, value_if_expression_is_null)
正如其他人所指出的,COALESCE也是一种选择:
COALESCE(expression, expression2, expression3)
返回第一个非空值
有一篇详细的文章描述了这里的差异:
http://databases.aspfaq.com/database/coalesce-vs-isnull-sql.html
答案 2 :(得分:5)
在sql server 2008中,有两个函数可以将 NULL 值替换为另一个值
<强> 1。 ISNULL 函数需要两个参数:要检查的值和空值的替换
<强> ISNULL(值,更换)强>
2.COALESCE 功能有点不同 COALESCE 会接受任意数量的参数并返回第一个非NULL值,我更喜欢COALESCE而不是ISNULL'因为符合ANSI标准,而ISNULL没有。
COALESCE(value1,value1,value3,valueN,替换)
我希望这对你有用。
答案 3 :(得分:2)
SELECT
Name, DOB,
(CASE WHEN Address1 IS NULL THEN 'NA' ELSE Address1 END) AS Address1,
(CASE WHEN Address2 IS NULL THEN 'NA' ELSE Address2 END) AS Address2,
...
FROM Users
答案 4 :(得分:2)
SELECT
Name, DOB, Address1,
coalesce(Address2,'NA'), coalesce(City,'NA'),
coalesce(State,'NA'), coalesce(Zip,'NA')
FROM Users
答案 5 :(得分:1)
使用isnull
:
SELECT
Name,
DOB,
isnull(Address1, 'NA') as [Address1],
isnull(Address2, 'NA') as [Address2],
isnull(City, 'NA') as [City],
isnull(State, 'NA') as [State],
isnull(Zip, 'NA') as [Zip]
FROM Users
你也可以使用coalesce
,它与isnull
完全相同,只是它可以使用两个以上的参数。从左到右检查参数,并返回第一个非null值。值必须是相同的类型。
答案 6 :(得分:0)
在SQL Server中处理NULL
什么是NULL?