Mysql 使用分隔符指定不同的值
我的表中有几个字段,我想使用Mysql 使用分隔符指定不同的值,mysql,sql,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) )
-
作为分隔符,将其中一些字段组合成一个字符串:
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'a'然后concat('a=',a)时的情况
当b'b'然后concat('-b=',b)时的情况
...
当z'z'然后concat('-z=',z)时的情况
)
;
现在,如果不包括A,那么我的结果将以-
开头,我不希望这样。实际上,我有15个案例,所以我不能再检查A是否为1来插入-
。最简单的解决方案是什么,这样我的字符串就不会以分隔符开头
我知道我可以检查它是否以“-”开头,但这对我来说是一个肮脏的解决方案…如果我很理解您的问题,您应该尝试使用
concat_ws
类似以下代码的内容(通常concat_ws
会跳过您案例语句中的空值):
下面的例子
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 |
+----+---------------+
如果我很理解您的问题,您应该尝试使用
concat_ws
进行类似以下代码的操作(通常concat_ws
将跳过案例语句中的空值):
下面的例子
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 |
+----+---------------+
您能给我们展示一个示例表以及您想要的输出吗?假设我有一个包含26个字段(a-->Z)的表。所有这些都是简单的VARCHAR(10)可能的输出:C=r-F=z-Y=q-z=n我意识到我的示例选择得不好,但这不重要……是的,但是数据是什么,你想要什么输出?我们无法读懂您的想法。我编辑了我的示例以使其更清晰。如果“-”的字符索引为1,为什么不按照您已经可以的方式获取字符串,然后将子字符串从2变为长度-1呢。如果使用sub select或cte,引用列别名将很容易,而不是复制/粘贴长case语句。能否向我们展示一个示例表以及所需的输出?假设我有一个包含26个字段(a-->Z)的表。所有这些都是简单的VARCHAR(10)可能的输出:C=r-F=z-Y=q-z=n我意识到我的示例选择得不好,但这不重要……是的,但是数据是什么,你想要什么输出?我们无法读懂您的想法。我编辑了我的示例以使其更清晰。如果“-”的字符索引为1,为什么不按照您已经可以的方式获取字符串,然后将子字符串从2变为长度-1呢。如果使用sub-select或cte,引用列别名将很容易,而不是复制/粘贴长case语句。这正是我要寻找的。谢谢很好的答案,例如米卡·埃尔特克斯:)这正是我想要的。谢谢很好地回答了MickaëlThx的例子:)