南大通用GBase 8a多个字符串拼接一起的函数concat,concat_ws语法和用例

GBase 8a数据库集群提供了2种字符串拼接的方法,一个是双竖线的符号,另一个是concat函数和concat_ws指定分隔符的函数,本文介绍2种方法的使用。

Concat

语法

CONCAT(str1,str2,…)
str1|str2[|str3...]

说明

返回结果为连接参数产生的字符串。如有任何一个参数为 NULL,则返回值为NULL。

注意:推荐用concat方式,代码更清晰。

用例

全部是字符串

gbase> select 'a'||'b'||'c';
+---------------+
| 'a'||'b'||'c' |
+---------------+
| abc           |
+---------------+
1 row in set (Elapsed: 00:00:00.00)

gbase> select concat('a','b','c');
+---------------------+
| concat('a','b','c') |
+---------------------+
| abc                 |
+---------------------+
1 row in set (Elapsed: 00:00:00.00)

第一个参数为数字或者日期,结果是参数先转成字符串,再拼接。结果符合预期。

gbase> select 1||'a'||'b'||'c';
+------------------+
| 1||'a'||'b'||'c' |
+------------------+
| 1abc             |
+------------------+
1 row in set (Elapsed: 00:00:00.00)

gbase> select concat(1,'a','b','c');
+-----------------------+
| concat(1,'a','b','c') |
+-----------------------+
| 1abc                  |
+-----------------------+
1 row in set (Elapsed: 00:00:00.00)

带null参数,结果为null.

所以在拼接前,要确认参数是否为null,必要时用ifnull, nvl等函数处理。详情看参考资料。

gbase> select 1||'a'||'b'||null||'c';
+------------------------+
| 1||'a'||'b'||null||'c' |
+------------------------+
| NULL                   |
+------------------------+
1 row in set (Elapsed: 00:00:00.00)

gbase> select concat(1,'a','b',null,'c');
+----------------------------+
| concat(1,'a','b',null,'c') |
+----------------------------+
| NULL                       |
+----------------------------+
1 row in set (Elapsed: 00:00:00.00)

Concat_WS

语法

CONCAT_WS(separator,str1,str2,...)

说明

CONCAT_WS()代表 CONCAT With Separator,是 CONCAT()的特殊形式。第一个参数是其它参数的分隔符。
分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其它参数。
如果分隔符为 NULL,则结果为 NULL。
函数会忽略分隔符后面参数中的 NULL 值。

样例

正常连接

gbase> select concat_ws('_','A','B','C');
+----------------------------+
| concat_ws('_','A','B','C') |
+----------------------------+
| A_B_C                      |
+----------------------------+
1 row in set (Elapsed: 00:00:00.00)

有NULL值

null值被忽略了,不像concat那样有任何一个值为null则结果值为null。

gbase> select concat_ws('_','A',null,'C');
+-----------------------------+
| concat_ws('_','A',null,'C') |
+-----------------------------+
| A_C                         |
+-----------------------------+
1 row in set (Elapsed: 00:00:00.00)

空连接符代替concat

当分隔符为空字符串时,等同于concat函数,但不担心null问题。

gbase> select concat_ws('','A',null,'C');
+----------------------------+
| concat_ws('','A',null,'C') |
+----------------------------+
| AC                         |
+----------------------------+
1 row in set (Elapsed: 00:00:00.00)

连接符为null

结果为Null

gbase> select concat_ws(null,'A','B','C');
+-----------------------------+
| concat_ws(null,'A','B','C') |
+-----------------------------+
| NULL                        |
+-----------------------------+
1 row in set (Elapsed: 00:00:00.00)

参考

GBase 8a对null相关函数nvl,ifnull,nullif等