我有一个表,其中一列包含长字符串,我想将其合并为易于阅读的格式('abc;abc;abc;efg;hij;klm;klm;klm'
-> 'abc: 3, efg: 1, hij: 1, klm: 3'
)。
我编写了一个合并字符串的函数,但是现在我想将其应用于表中的每个条目。关于如何实现这一目标的任何建议?
这是在@str
中拆分和合并字符串的代码:
SET @str = 'abc;abc;abc;efg;hij;klm;klm;klm;';
WITH cte1(token, remainder) AS (
SELECT LEFT(@str, LOCATE(';', @str)-1) AS token,
RIGHT(@str, LENGTH(@str)-LOCATE(';', @str)) as remainder -- anchor member
UNION ALL
SELECT LEFT(remainder, LOCATE(';', remainder)-1) AS token,
RIGHT(remainder, LENGTH(remainder)-LOCATE(';', remainder)) as remainder -- recursive member
FROM cte1
WHERE LENGTH(remainder)>0 -- terminator
), cte2 AS (
SELECT token, count(token) AS c
FROM cte1
GROUP BY token
HAVING LENGTH(token)>0
ORDER BY token
)
SELECT GROUP_CONCAT(CONCAT_WS(': ', token, c) SEPARATOR ', ') FROM cte2
GROUP BY 1
第一个cte1
将字符串分成单独的标记,第二个cte2
创建数据透视并计算每个实例,最后的SELECT
语句将结果表合并为一个字符串。
在以下设置中,如何将其应用于S1
列中的每个条目,例如通过更新表并将结果添加到S2
?
CREATE TABLE T1 (
ID INT, S1 VARCHAR, S2 VARCHAR);
INSERT INTO T1
VALUES (1, 'abc;abc;abc;efg;hij;klm;klm;klm;', ''),
(2, '123;123;235;235;235;987;987;123;', '');
非常感谢您的帮助!