在处理可能为空的CHAR列时是否存在类似于合并功能的东西?
例如,假设我要使用PREFERRED_NAME
(如果存在),但要使用FIRST_NAME
(如果不存在),并且正在使用的表具有这样的数据?
+-------------+----------------+
| FIRST_NAME | PREFERRED_NAME |
+-------------+----------------+
| JOHN | |
| STEPHANIE | |
| STEPHEN | STEVE |
+-------------+----------------+
我希望能够写这样的东西:
SELECT COALESCE(PREFERRED_NAME,FIRST_NAME)
FROM COMPANY.EMPLOYEES
...但是看起来COALESCE
仅适用于NULL
,因为对于我的结果上方的数据,看起来像这样:
+---------+
| Column1 |
+---------+
| |
| |
| STEVE |
+---------+
我在question for MySQL中找到了一个可能的解决方案,如下所示:
SELECT COALESCE(NULLIF(PREFERRED_NAME,''),FIRST_NAME)
此时使用NULLIF
还是编写CASE
语句是最佳解决方案?我希望有一个能为我完成的功能。
答案 0 :(得分:2)
您可以使用CASE语句:
case when length(trim(preferred_name)) > 0
then preferred_name
else first_name
end
您当然可以在用户定义函数(UDF)中使用此逻辑(或COALESCE(NULLIF(...))
逻辑),以允许您“使用单个函数”。
一个更好的解决方案是使PREFERRED_NAME
列可为空,并避免使用长度为0的值,但这可能是一个更复杂的解决方案。
答案 1 :(得分:2)
一种方法是:
SELECT COALESCE(NULLIF(TRIM(E.PREFERRED_NAME), ''), E.FIRST_NAME)
FROM COMPANY.EMPLOYEES E