dst*_*grs 6 oracle null space concatenation
我需要将几个列连接成一个,每个值之间有空格.问题是当一个值为null时,我最终得到两个值之间的双倍空格.
例
SELECT (FIRST_NAME || ' ' || MIDDLE_NAME || ' ' || LAST_NAME
FROM TABLE_A;
Run Code Online (Sandbox Code Playgroud)
如果中间名恰好是NULL,那么我最后在名字和姓氏之间有两个空格.有什么方法可以解决这个问题,只有空值时只有一个空格?
SELECT TRIM(TRIM(FIRST_NAME || ' ' || MIDDLE_NAME) || ' ' || LAST_NAME)
FROM TABLE_A;
Run Code Online (Sandbox Code Playgroud)
从Oracle的文档中:
CONCAT_WS(分离器,STR1,STR2,...)
CONCAT_WS()代表Concatenate With Separator,是CONCAT()的一种特殊形式.第一个参数是其余参数的分隔符.在要连接的字符串之间添加分隔符.分隔符可以是字符串,其余参数也可以.如果分隔符为NULL,则结果为NULL.
而非常重要的评论:
CONCAT_WS()不会跳过空字符串.但是,它会在分隔符参数后跳过任何NULL值.
所以在你的情况下它应该是:
CONCAT_WS(',', FIRST_NAME, MIDDLE_NAME, LAST_NAME);
Run Code Online (Sandbox Code Playgroud)
另一种选择是使用解码:
SELECT decode(FIRST_NAME,'','',FIRST_NAME ||' ') ||
decode(MIDDLE_NAME,'','',MIDDLE_NAME ||' ') || LAST_NAME
FROM TABLE_A;
Run Code Online (Sandbox Code Playgroud)