MySQL 8中SELECT提取文本列内各段指定前缀的技术问询
MySQL 8 提取codes表中标识串并逗号分隔输出
针对codes表desc字段中用<Br>分隔、格式为「标识串 - 描述内容」的字符串,我们可以利用MySQL 8的JSON_TABLE函数结合字符串处理函数实现需求,具体SQL语句如下:
SELECT id, GROUP_CONCAT(TRIM(SUBSTRING_INDEX(item, ' - ', 1)) SEPARATOR ', ') AS extracted_codes FROM codes, JSON_TABLE( -- 将<Br>分隔的字符串转换为JSON数组格式 CONCAT('["', REPLACE(desc, '<Br>', '","'), '"]'), '$[*]' COLUMNS(item TEXT PATH '$') ) AS split_items GROUP BY id;
语句说明:
- 拆分字符串:通过
REPLACE(desc, '<Br>', '","')把<Br>替换为",",再用CONCAT包裹成JSON数组格式,让JSON_TABLE可以将每个子串拆分为单独的行。 - 提取标识串:对每个拆分后的子串,用
SUBSTRING_INDEX(item, ' - ', 1)截取-之前的部分,TRIM确保结果没有多余空格。 - 合并结果:用
GROUP_CONCAT将同一id下的所有标识串用,连接,得到最终的逗号分隔格式。
执行上述语句后,示例数据的输出将与期望结果完全一致:
id | extracted_codes ---|------------------------------- 1 | 423.9, 511.9, 486, 42.a.7.31, 785.0 2 | 428.0M 3 | E.423.9, 511.9
内容的提问来源于stack exchange,提问作者Darren Gates
相关产品推荐
相关产品推荐

