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

联系表

  • 联系方式
  • 联系日期
  • 用户身份
  • 概括
  • 联系方式
  • 排序名称

用户表

  • 用户身份
  • 地址ID

地址表

  • 地址ID
  • 城市
  • 街道
  • 状态
  • 压缩
有帮助吗?

解决方案

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

这里 是上面 CONVERT 语句的 SQL 日期时间格式的图表。

其他提示

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

等等等等

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

使用 ISNULL 非常简单。

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

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

使用 '国际金融论坛' 是一个 Access DB 解决方案,但也可以在其他数据库中工作。

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

函数 IIF 返回 2 个值之一,具体取决于表达式的计算。
SQL 语法:IIF( 表达式, 真值 1, 假值 )

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

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

对每一列重复此操作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top