Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 空间/空白的合并函数_Sql_Db2 - Fatal编程技术网

Sql 空间/空白的合并函数

Sql 空间/空白的合并函数,sql,db2,Sql,Db2,对于可能为空的CHAR列,是否有类似于coalesce函数的功能 例如,假设我想使用首选\u名称(如果它存在),但如果它不存在,则使用第一个\u名称,并且我正在处理的表有这样的数据 +-------------+----------------+ | FIRST_NAME | PREFERRED_NAME | +-------------+----------------+ | JOHN | | | STEPHANIE |

对于可能为空的CHAR列,是否有类似于coalesce函数的功能

例如,假设我想使用
首选\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会的。