用于替换空值的SQL查询。

时间:2008-10-15 22:18:17

标签: sql null

我需要一个SQL查询,它返回下表中的ContactDate,SortName,City,ContactType和Summary。如果任何值为null,我需要它返回文本“No Entry”。

ContactTable

  • 的ContactID
  • ContactDate
  • UserID
  • 摘要
  • ContactType
  • SortName

用户表

  • 用户ID
  • 姓氏
  • AddressID

AddressTable

  • AddressID
  • Street
  • 国家
  • 邮编

6 个答案:

答案 0 :(得分:14)

SELECT COALESCE(CAST(CONVERT(VARCHAR(10), ContactTable.ContactDate, 101) AS VARCHAR(10)), 'No Entry') AS ContactDate,
       COALESCE(ContactTable.SortName, 'No Entry') AS SortName,
       COALESCE(AddressTable.City, 'No Entry') AS City,
       COALESCE(ContactTable.ContactType, 'No Entry') AS ContactType
FROM ContactTable
LEFT OUTER JOIN UserTable ON ContactTable.UserID = UserTable.UserID
LEFT OUTER JOIN AddressTable ON UserTable.AddressID = AddressTable.AddressID

Here是上面CONVERT语句的SQL DateTime格式图表。

答案 1 :(得分:8)

COALESCE()在任何平衡的盐平台上。

确保处理施法问题。

如:

--(SQL Server)
SELECT
  C.ContactID,
  COALESCE(CAST(CONVERT(varchar(10), C.ContactDate, 101) AS varchar(10), 'No Entry') AS ContactDate,
  COALESCE(SorName, 'No Entry') AS SortName

等等。

答案 2 :(得分:4)

SELECT 
  ISNULL(ContactDate, 'No Entry') AS ContactDate
FROM Table

使用ISNULL非常简单。

答案 3 :(得分:1)

此函数的Oracle版本称为nvl。相同的用法 - SELECT nvl(col_name, desired_value) FROM foo

更常见的版本是decode,它有三个参数,允许您指定要替换的列值(因此您可以将所有'Johnny'替换为'John'或其他内容)。

答案 4 :(得分:0)

使用' IIF '是Access数据库解决方案,但可以在其他数据库中使用。

SELECT IIF(IsNull(Foo), 'No Entry' ,Foo), IIF(IsNull(Bar), 'No Entry' ,Bar) From TableName   

函数IIF返回2个值中的一个取决于表达式的评估 SQL语法:       IIF(表达式,真值1,假值)

答案 5 :(得分:0)

您还可以为每列进行不同的调用。这将需要更多的单独调用,但如果您没有很多行要更新它可能会更快。

update ContactTable
set ContactDate = 'No Entry'
where ContactDate is null;

对每一列重复。