我需要一个从下表中返回 ContactDate、SortName、City、ContactType 和 Summary 的 SQL 查询。如果任何值为空,我需要它返回文本“No Entry”。
联系表
- 联系人 ID
- 联系日期
- 用户身份
- 概括
- 联系人类型
- 排序名称
用户表
- 用户身份
- 名
- 姓
- 地址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 DateTime 格式图表。
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' 或其他内容)。
使用“ IIF ”是一种 Access DB 解决方案,但可能适用于其他 DB。
SELECT IIF(IsNull(Foo), 'No Entry' ,Foo), IIF(IsNull(Bar), 'No Entry' ,Bar) From TableName
函数 IIF 返回 2 个值之一,具体取决于表达式的评估。
SQL 语法:IIF( 表达式, true-value1, false-value )
您还可以对每一列进行不同的调用。这将需要更多的个人调用,但如果您没有很多行要更新,它可能会更快。
更新联系人表 设置 ContactDate = '无条目' 其中 ContactDate 为空;
对每一列重复。