CONCAT_WS的用法

近来工作需要,从数据库里取N个字段,然后组合到一起用“,”分割显示,起初想到用CONCAT()来处理,好是麻烦,没想到在手册里居然有提到CONCAT_WS(),非常好用。
CONCAT_WS(separator, str1, str2,...)

它是一个特殊形式的 CONCAT()。第一个参数剩余参数间的分隔符。分隔符可以是与剩余参数一样的字符串。如果分隔符是 NULL,返回值也将为 NULL。这个函数会跳过分隔符参数后的任何 NULL 和空字符串。分隔符将被加到被连接的字符串之间

简单例子如下:

 
mysql> SELECT CONCAT_WS(",","First name","Second name","Last Name");
       -> 'First name,Second name,Last Name'
mysql> SELECT CONCAT_WS(",","First name",NULL,"Last Name");
       -> 'First name,Last Name'
### concat_ws 函数的用法与示例 `concat_ws` 函数是用于将多个字符串连接成一个字符串,并允许指定分隔符的一种方法。该函数会自动忽略 `NULL` 值,因此在处理可能包含空值的数据时非常有用。其语法如下: ```sql CONCAT_WS(separator, string1, string2, ..., stringN) ``` - `separator`:指定的分隔符,将插入在拼接的字符串之间。 - `string1, string2, ..., stringN`:要拼接的字符串。 #### 示例 1:基本用法 以下是一个简单的例子,展示如何使用 `concat_ws` 函数将多个字符串合并为一个字符串,并用逗号作为分隔符[^1]。 ```sql SELECT CONCAT_WS(',', 'Hive', 'is', 'a', 'powerful', 'tool') AS result; ``` 输出结果为: ``` Hive,is,a,powerful,tool ``` #### 示例 2:忽略 NULL 值 如果某些字符串为 `NULL`,`concat_ws` 函数会自动忽略这些值[^2]。 ```sql SELECT CONCAT_WS(';', 'Apple', NULL, 'Banana', 'Cherry') AS result; ``` 输出结果为: ``` Apple;Banana;Cherry ``` #### 示例 3:结合表数据使用 假设有一个名为 `student_scores` 的表,包含以下字段:`name`(学生姓名)、`score1`(第一次考试成绩)、`score2`(第二次考试成绩)和 `score3`(第三次考试成绩)。可以使用 `concat_ws` 函数将学生的三次成绩合并为一个字符串[^1]。 ```sql CREATE TABLE student_scores ( name STRING, score1 INT, score2 INT, score3 INT ); INSERT INTO student_scores VALUES ('Alice', 85, 90, 78), ('Bob', 92, NULL, 88), ('Charlie', 76, 85, NULL); SELECT name, CONCAT_WS(',', CAST(score1 AS STRING), CAST(score2 AS STRING), CAST(score3 AS STRING)) AS scores FROM student_scores; ``` 输出结果为: ``` +---------+----------+ | name | scores | +---------+----------+ | Alice | 85,90,78 | | Bob | 92,,88 | | Charlie | 76,85 | +---------+----------+ ``` 注意:在实际使用中,可能需要将数值类型转换为字符串类型(如上例中的 `CAST` 操作),以便正确地进行字符串拼接。 --- #### 注意事项 1. 如果分隔符本身为 `NULL`,则整个 `concat_ws` 表达式的结果也将为 `NULL`[^2]。 2. 在涉及分组查询时(如使用 `GROUP BY`),可以结合聚合函数(如 `GROUP_CONCAT` 或其他类似函数)实现更复杂的功能[^3]。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值