是否有一种简洁的方法可以对 SQL 查询的所有列执行相同的合并?
Is there a succinct way of performing an identical coalesce on all columns of an SQL query?
假设我有一个问题:
SELECT FirstName, LastName, Sex, Age FROM Human
如果由于任何原因在 table 中有一个空值,我们可以:
coalesce(FirstName, 'Unknown')
对于具有更多列的较大查询,有没有办法合并每个单独的列,而不是重复 coalesce
操作的数量,而不是单独合并每个列?
像这样:
SELECT coalesce(FirstName, LastName, Sex, Age, 'Unknown') FROM Human
(我知道那是错误的,不会起作用,这是我试图说明我的意图的示例的一部分)。
理想情况下,上面的代码会依次检查每一列并将任何空值替换为 'Unknown'。有没有比这个更简单的方法:
SELECT coalesce(FirstName,'Unknown'), coalesce(LastName,'Unknown'), coalesce(Sex, 'Unspecified'), coalesce(Age,'0') FROM Human
另外,回到这个例子:
SELECT coalesce(FirstName, LastName, Sex, Age, 'Unknown') FROM Human
除了 n 列之外,是否有办法像上面那样应用过度拱形 coalesce
?例如仅适用于 FirstName
、LastName
和 Sex
,不适用于其余的。
不,你不能那样做。 COALESCE"is a syntactic shortcut for the CASE
expression."
你应该问自己的问题是,
- 为什么我一开始就有这些
NULL
值?
- 为什么我要在我的 TSQL 中处理我的数据表示? TSQL 是使用基于集合的操作检索关系数据的绝佳工具。 TSQL 是使数据看起来不错的糟糕工具。
- 用
'Unknown'
代替 NULL
会给我带来什么,除了性能不足和未来的头痛之外?
假设我有一个问题:
SELECT FirstName, LastName, Sex, Age FROM Human
如果由于任何原因在 table 中有一个空值,我们可以:
coalesce(FirstName, 'Unknown')
对于具有更多列的较大查询,有没有办法合并每个单独的列,而不是重复 coalesce
操作的数量,而不是单独合并每个列?
像这样:
SELECT coalesce(FirstName, LastName, Sex, Age, 'Unknown') FROM Human
(我知道那是错误的,不会起作用,这是我试图说明我的意图的示例的一部分)。
理想情况下,上面的代码会依次检查每一列并将任何空值替换为 'Unknown'。有没有比这个更简单的方法:
SELECT coalesce(FirstName,'Unknown'), coalesce(LastName,'Unknown'), coalesce(Sex, 'Unspecified'), coalesce(Age,'0') FROM Human
另外,回到这个例子:
SELECT coalesce(FirstName, LastName, Sex, Age, 'Unknown') FROM Human
除了 n 列之外,是否有办法像上面那样应用过度拱形 coalesce
?例如仅适用于 FirstName
、LastName
和 Sex
,不适用于其余的。
不,你不能那样做。 COALESCE"is a syntactic shortcut for the CASE
expression."
你应该问自己的问题是,
- 为什么我一开始就有这些
NULL
值? - 为什么我要在我的 TSQL 中处理我的数据表示? TSQL 是使用基于集合的操作检索关系数据的绝佳工具。 TSQL 是使数据看起来不错的糟糕工具。
- 用
'Unknown'
代替NULL
会给我带来什么,除了性能不足和未来的头痛之外?