5

我正在对 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.

4

7 回答 7

18

您想使用COALESCE功能。

SELECT
    Name
,   DOB
,   COALESCE(Address1, 'NA')
,   COALESCE(Address2, 'NA')
,   COALESCE(City, 'NA')
,   COALESCE(State, 'NA')
,   COALESCE(Zip, 'NA')
FROM Users
于 2012-06-27T16:51:36.357 回答
5

尝试:

ISNULL(expression, value_if_expression_is_null)

正如其他人指出的那样,COALESCE 也是一种选择:

COALESCE(expression, expression2, expression3)

它返回第一个非空值

有一篇详细的文章描述了这里的差异:

http://databases.aspfaq.com/database/coalesce-vs-isnull-sql.html

于 2012-06-27T16:51:51.267 回答
5

在 sql server 2008 中有两个函数可以用另一个值替换NULL

1. ISNULL函数需要两个参数:要检查的值和空值的替换

ISNULL(值,替换)

2.COALESCE 函数的工作方式有点不同COALESCE将接受任意数量的参数并返回第一个非 NULL 值,我更喜欢 COALESCE 而不是 ISNULL ,因为符合 ANSI 标准,而 ISNULL 不符合。

COALESCE(value1,value1,value3,valueN,replacement)

我希望这对你有用。

于 2012-06-27T17:03:57.937 回答
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
于 2012-06-27T16:53:33.967 回答
2
SELECT 
  Name, DOB, Address1, 
  coalesce(Address2,'NA'), coalesce(City,'NA'), 
  coalesce(State,'NA'), coalesce(Zip,'NA')
FROM Users
于 2012-06-27T17:01:32.197 回答
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,只是它可以接受两个以上的参数。从左到右检查参数并返回第一个非空值。值必须属于同一类型。

于 2012-06-27T16:54:21.160 回答
0

在 SQL Server 中处理 NULL

什么是 NULL ?

  • NULL 表示没有结果或未知。
  • NULL 不等于 NULL 本身。
  • NULL 值不同于空值或零值。
  • NULL 是排序顺序中的最小值。
  • 当 group by 被执行时,NULL 被认为是相等的。
  • 如果 Group By 子句中的列包含 NULL 行,则这些行将被分组到一个组中。

使用示例处理 SQL Server 中的 Null

于 2018-06-15T12:14:25.630 回答