Sql 空间/空白的合并函数
对于可能为空的CHAR列,是否有类似于coalesce函数的功能 例如,假设我想使用Sql 空间/空白的合并函数,sql,db2,Sql,Db2,对于可能为空的CHAR列,是否有类似于coalesce函数的功能 例如,假设我想使用首选\u名称(如果它存在),但如果它不存在,则使用第一个\u名称,并且我正在处理的表有这样的数据 +-------------+----------------+ | FIRST_NAME | PREFERRED_NAME | +-------------+----------------+ | JOHN | | | STEPHANIE |
首选\u名称
(如果它存在),但如果它不存在,则使用第一个\u名称
,并且我正在处理的表有这样的数据
+-------------+----------------+
| FIRST_NAME | PREFERRED_NAME |
+-------------+----------------+
| JOHN | |
| STEPHANIE | |
| STEPHEN | STEVE |
+-------------+----------------+
我希望能写出这样的作品:
SELECT COALESCE(PREFERRED_NAME,FIRST_NAME)
FROM COMPANY.EMPLOYEES
+---------+
| Column1 |
+---------+
| |
| |
| STEVE |
+---------+
SELECT COALESCE(NULLIF(PREFERRED_NAME,''),FIRST_NAME)
。。。但是它看起来像是COALESCE
只对NULL
有效,因为对于上面的数据,我的结果如下所示:
SELECT COALESCE(PREFERRED_NAME,FIRST_NAME)
FROM COMPANY.EMPLOYEES
+---------+
| Column1 |
+---------+
| |
| |
| STEVE |
+---------+
SELECT COALESCE(NULLIF(PREFERRED_NAME,''),FIRST_NAME)
我在a中找到了一个可能的解决方案,如下所示:
SELECT COALESCE(PREFERRED_NAME,FIRST_NAME)
FROM COMPANY.EMPLOYEES
+---------+
| Column1 |
+---------+
| |
| |
| STEVE |
+---------+
SELECT COALESCE(NULLIF(PREFERRED_NAME,''),FIRST_NAME)
此时,使用
NULLIF
或编写CASE
语句是最佳解决方案吗?我希望有一个函数可以帮我完成这项工作。您可以使用CASE语句:
case when length(trim(preferred_name)) > 0
then preferred_name
else first_name
end
您当然可以在允许您“使用单个函数”的用户定义函数(UDF)中使用此逻辑(或合并(NULLIF(…)
逻辑)
更好的解决方案是将
首选\u NAME
列设置为空,并避免使用0长度值,但这可能是一个更复杂的解决方案。您可以使用CASE语句:
case when length(trim(preferred_name)) > 0
then preferred_name
else first_name
end
您当然可以在允许您“使用单个函数”的用户定义函数(UDF)中使用此逻辑(或合并(NULLIF(…)
逻辑)
更好的解决方案是将首选\u名称
列设置为空,并避免使用0长度值,但这可能是一个更复杂的解决方案。一种方法是:
SELECT COALESCE(NULLIF(TRIM(E.PREFERRED_NAME), ''), E.FIRST_NAME)
FROM COMPANY.EMPLOYEES E
一种方法是:
SELECT COALESCE(NULLIF(TRIM(E.PREFERRED_NAME), ''), E.FIRST_NAME)
FROM COMPANY.EMPLOYEES E
我完全同意
PREFERRED\u NAME
可以为空,不幸的是我无法控制模式,所以它就是它。对于那些对未来感兴趣的人,这里有一些文档。如果您的名称字段被定义为CHAR(因为它们的末尾用空格填充),这将不起作用@bhamby-Wow,不确定我当时在想什么。回答正确,谢谢:-)我完全同意首选\u名称
可以为空,不幸的是,我无法控制模式,所以它就是它。对于那些对未来感兴趣的人,这里有一些文档。如果您的名称字段定义为CHAR,这将不起作用(因为这些都是用空格填充的)。@bhamby哇,不确定我在想什么。正确答案,谢谢:-)修剪不是真的需要,DB2会的。修剪不是真的需要,DB2会的。