代码之家  ›  专栏  ›  技术社区  ›  Jeff B

空间/空白的合并函数

  •  0
  • Jeff B  · 技术社区  · 7 年前

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

    例如,假设我想使用 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 回复  |  直到 7 年前
        1
  •  2
  •   Gordon Linoff    7 年前

    一种方法是:

    SELECT COALESCE(NULLIF(TRIM(E.PREFERRED_NAME), ''), E.FIRST_NAME)
    FROM COMPANY.EMPLOYEES E
    
        2
  •  2
  •   Ian Bjorhovde    7 年前

    case when length(trim(preferred_name)) > 0 
         then preferred_name 
         else first_name 
         end
    

    您当然可以使用此逻辑(或 COALESCE(NULLIF(...)) 允许“使用单个函数”的用户定义函数(UDF)中的逻辑

    更好的解决办法是让 PREFERRED_NAME