首页 > 解决方案 > 拆分 FullName 哪里有空值(db2 sql)

问题描述

我的全名包含空白或空值,当我拆分为名字、姓氏时会导致错误。

这是错误: 错误 [22011] [IBM][DB2/AIX64] 由于标量函数的数字参数超出范围,因此未执行该语句。

这是我的原始代码:

UPPER(right(AGENT_NM, (char_length (AGENT_NM) - position( ' ', AGENT_NM))))|| ', ' || UPPER(left(AGENT_NM, position( ' ', AGENT_NM) - 1)) AS AGENT_NAME,

这是我尝试过的:

1-

CASE when REGEXP_COUNT(AGENT_NM,',')> 0 then left (AGENT_NM, position( ' ', AGENT_NM) - 1) END AS FNAME,

2-

CASE when(AGENT_NM= ' ') then Null Else left (AGENT_NM, position( '
> ', AGENT_NM) - 1) END AS FNAME,

但是它返回空白。

标签: sqldatabasesplitdb2

解决方案


首先在您的姓名末尾连接一个空格:

SELECT
  TRIM(UPPER(RIGHT(AGENT_NMs, char_length (AGENT_NMs) - position( ' ', AGENT_NMs))))|| 
    ', ' || 
    TRIM(UPPER(left(AGENT_NMs, position( ' ', AGENT_NMs) - 1))) 
  AS AGENT_NAME
FROM
  (
    SELECT 
      a.*,
      COALESCE(agent_nm, '')||' ' as agent_nms
    FROM
     yourtable a
  ) x

这里我们使用coalesce来保证name不为null,然后我们在上面添加一个空格作为position函数查找的东西

最重要的是您的代码被调整为引用新名称 agent_nms 并添加了一个额外的修剪命令以删除任何无关的空格。顺便说一句,它看起来确实有太多的括号


推荐阅读