Concat使用分隔符的不同值

时间:2016-06-27 15:32:27

标签: mysql sql

我的表中有一些字段,我想将其中一些字段组合成一个字符串,使用-作为分隔符:

select 
    concat(
        case when a <> 'a' then concat('A = ', a)
        case when b <> 'b' then concat(' - B = ', b)
        ...
        case when z <> 'z' then concat(' - Z = ', z)
    )
;

现在,如果不包含A,那么我的结果将以-开头,我不想要。实际上我有15个案例,所以我不能再检查A是否再次插入-。什么是最简单的解决方案,以便我的字符串永远不会以分隔符开始?

我知道我可以检查它是否以&#39; - &#39;,但这看起来像是一个肮脏的解决方案......

1 个答案:

答案 0 :(得分:4)

如果我理解你的问题,你应该尝试使用concat_ws之类的代码,例如以下代码(通常concat_ws会从CASE语句中跳过空值):

SELECT
    CONCAT_WS(
        ' - ', 
        (CASE a WHEN 1 THEN CONCAT('A = ', a) ELSE null END), 
        (CASE b WHEN 1 THEN CONCAT('B = ', b) ELSE null END),
        ...
    )

以下示例

create table table5
(   id int auto_increment primary key,
    a int not null,
    b int not null
);
insert table5(a,b) values (0,0),(1,0),(1,1),(0,1),(1,1);

SELECT 
    id, 
    CONCAT_WS( 
        ' - ',  
        (CASE a WHEN 1 THEN CONCAT('A = ', a) ELSE null END),  
        (CASE b WHEN 1 THEN CONCAT('B = ', b) ELSE null END) 
    ) as xxx 
    from table5; 
+----+---------------+
| id | xxx           |
+----+---------------+
|  1 |               |
|  2 | A = 1         |
|  3 | A = 1 - B = 1 |
|  4 | B = 1         |
|  5 | A = 1 - B = 1 |
+----+---------------+