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)