空格/空格的合并功能

时间:2018-12-27 19:19:40

标签: sql db2

在处理可能为空的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语句是最佳解决方案?我希望有一个能为我完成的功能。

2 个答案:

答案 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
相关问题