CONCAT,CONCAT_WS和GROUP_CONCAT

以下表为例:

1、CONCAT函数

(1)功能

将多个字符串连接成一个字符串;

(2)语法

CONCAT(str1,str2,…)

(3)示例

语句:

SELECT 
    CONCAT(id, query_condition, hotel_id, try_times)
FROM
    test_warehouse_db.query_task;   

结果:

(4)注意事项

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

2、CONCAT_WS函数

(1)功能

concat_ws即concat with separator。和concat()一样,用于将多个字符串连接成一个字符串,但是可以一次性指定分隔符

(2)语法

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

(3)示例

语句:

SELECT 
    CONCAT_WS('$$',
            id,
            query_condition,
            hotel_id,
            try_times) AS info
FROM
    test_warehouse_db.query_task;  

结果:


(4)注意事项 

返回结果为连接参数产生的字符串,如果有任何一个参数为null,则该参数为null,不影响其他参数的拼接;

3、GROUP_CONCAT函数

(1)功能

用于将多个字符串连接成一个字符串

(2)语法

group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'])

(3)示例

语句1:

SELECT 
    GROUP_CONCAT(DISTINCT hotel_id, '@@')
FROM
    test_warehouse_db.query_task
WHERE
    id > 1070
ORDER BY id DESC;  
300003521@@,300001798@@,300003508@@

语句2:

SELECT 
    type,
    COUNT(id) count,
    GROUP_CONCAT(DISTINCT hotel_id SEPARATOR '@') hotel_id,
    GROUP_CONCAT(DISTINCT agency_id, '@') agency_id
FROM
    test_warehouse_db.query_task
WHERE
    id > 1070
GROUP BY type; 

结果:

语句3:

SELECT 
    GROUP_CONCAT(DISTINCT hotel_id ORDER BY id DESC SEPARATOR '@') hotel_id
FROM
    test_warehouse_db.query_task
WHERE
    id > 1070; 

结果:

300003508@300001798@300003521

(4)注意事项

a、通过使用distinct可以排除重复值;

b、如果希望对结果中的值进行排序,可以使用order by子句;

c、separator是一个字符串值,缺省为一个逗号;

猜你喜欢

转载自blog.csdn.net/lydia_cmy/article/details/120835352