繁体   English   中英

SQL Server 2008 - 在列为空时设置值

[英]SQL Server 2008 - Set a value when the column is null

我正在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时返回此静态值。

您想使用COALESCE功能。

SELECT
    Name
,   DOB
,   COALESCE(Address1, 'NA')
,   COALESCE(Address2, 'NA')
,   COALESCE(City, 'NA')
,   COALESCE(State, 'NA')
,   COALESCE(Zip, 'NA')
FROM Users

尝试:

ISNULL(expression, value_if_expression_is_null)

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

COALESCE(expression, expression2, expression3)

返回第一个非空值

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

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

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

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

ISNULL(值,更换)

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

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

我希望这对你有用。

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
SELECT 
  Name, DOB, Address1, 
  coalesce(Address2,'NA'), coalesce(City,'NA'), 
  coalesce(State,'NA'), coalesce(Zip,'NA')
FROM Users

使用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值。 值必须是相同的类型。

在SQL Server中处理NULL

什么是NULL?

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

使用示例在SQL Server中处理Null

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM