我的表中有一些字段,我想将其中一些字段组合成一个字符串,使用-
作为分隔符:
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;,但这看起来像是一个肮脏的解决方案......
答案 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 |
+----+---------------+