【发布时间】:2017-02-27 08:33:49
【问题描述】:
我在 MySQL 中有以下表格
表 1:
c1 id
A1 3|5|2
A2 1|2
A3 3
A4 1|2|3|4|5
A5 2|4|1|3
表 2:
身份证号
1 AA
2 艾伯特
3 CDE
4 XXWQ
5年
我想将 tb1.ids = tb2.id 上的两个表作为拆分表 1 中的所有 id,然后替换为它们的名称,然后再次连接。
输出
3|5|2 -> CDE|Y|ABERT
1|2 -> AA|ABERT
我正在使用以下代码来拆分字符串。
CASE WHEN tb1.ids LIKE '%|%'THEN SUBSTRING_INDEX( `tb1.ids` , '|', 1 ) ELSE tb1.ids END AS id1,
CASE WHEN tb1.ids LIKE '%|%|%' THEN SUBSTRING_INDEX(SUBSTRING_INDEX( `tb1.ids` , '|', 2 ),'|',-1) WHEN tb1.ids LIKE '%|%' THEN SUBSTRING_INDEX( `tb1.ids` , '|', -1 )ELSE '' END AS id2,
CASE WHEN tb1.ids LIKE '%|%|%|%' THEN SUBSTRING_INDEX(SUBSTRING_INDEX( `tb1.ids` , '|', 3 ),'|',-1) WHEN tb1.ids LIKE '%|%|%' THEN SUBSTRING_INDEX( `tb1.ids` , '|', -1 ) ELSE '' END AS id3,
CASE WHEN tb1.ids LIKE '%|%|%|%|%' THEN SUBSTRING_INDEX(SUBSTRING_INDEX( `tb1.ids` , '|', 4 ),'|',-1) WHEN tb1.ids LIKE '%|%|%|%' THEN SUBSTRING_INDEX( `tb1.ids` , '|', -1 ) ELSE '' END AS id4,
CASE WHEN tb1.ids LIKE '%|%|%|%|%|%' THEN SUBSTRING_INDEX(SUBSTRING_INDEX( `tb1.ids` , '|', 5 ),'|',-1) WHEN tb1.ids LIKE '%|%|%|%|%' THEN SUBSTRING_INDEX( `tb1.ids` , '|', -1 ) ELSE '' END AS id5
【问题讨论】:
-
永远不要在单个列中存储多个值。如果你这样做,你会遇到这样的问题。你能改变你的桌子设计吗?
-
我没有对该数据库的写入权限。实际上,该列是特定旅行的多个目的地的行程。
标签: mysql stored-procedures split concatenation concat