MySQL:将多个逗号分隔的字符串存储到临时表中

irtuqstp  于 2022-11-21  发布在  Mysql
关注(0)|答案(1)|浏览(323)

给定 字符 串

string 1: 'A,B,C,D,E'
string 2: 'X091,X089,X051,X043,X023'

中 的 每 一 个
要 在 临时 表 中 存储 为 :

String1     String2
---------------------
A           X091
B           X089
C           X051
D           X043
E           X023

格式
已 尝试 : 堆栈 溢出 代码 上 的 SQL Server 版本 。 下面 的 代码 在 SQL Server 上 工作 。 * * 但 我 想要 它 的 mysql 版本 。 请 帮助 ... * *

DECLARE @str1 VARCHAR(1000)= 'A,B,C,D,E';
DECLARE @str2 VARCHAR(1000)= 'X091,X089,X051,X043,X023';

;WITH
 --split the first string
 a1 AS (SELECT n=0, i=-1, j=0 UNION ALL SELECT n+1, j, CHARINDEX(',', @str1, j+1) FROM a1 WHERE j > i)
,b1 AS (SELECT n, SUBSTRING(@str1, i+1, IIF(j>0, j, LEN(@str1)+1)-i-1) s FROM a1 WHERE i >= 0)
 --split the second string
,a2 AS (SELECT n=0, i=-1, j=0 UNION ALL SELECT n+1, j, CHARINDEX(',', @str2, j+1) FROM a2 WHERE j > i)
,b2 AS (SELECT n, SUBSTRING(@str2, i+1, IIF(j>0, j, LEN(@str2)+1)-i-1) s FROM a2 WHERE i >= 0)
--join them by the index
SELECT b1.n
      ,b1.s AS s1
      ,b2.s AS s2
FROM b1
INNER JOIN b2 ON b1.n=b2.n
ORDER BY b1.n;

格式

hc8w905p

hc8w905p1#

可以使用递归的cte来拆分字符串,然后将结果连接在一起:

with recursive cte(id, c, s, r) as (
   select t.id, 0, regexp_substr(t.str, '^[^,]+'), regexp_replace(t.str, '^[^,]+,*', '') 
   from tbl t
   union all
   select c.id, c.c + 1, regexp_substr(c.r, '^[^,]+'), regexp_replace(c.r, '^[^,]+,*', '') 
   from cte c where length(c.r) > 0
)
select c1.s, c2.s from cte c1 join cte c2 on c2.c = c1.c where c1.id = 1 and c2.id = 2

See fiddle

相关问题