我在Mysql的单个字符串中有一个分隔文本块,我需要解析。该块如下所示
BGN|1
TST|12345|5
END|1
BGN|2
TST|22345|6
END|2
BGN|3
TST|67554|7
END|3
我想在TST之后立即将值12345
,22345
,67554
提取到单独的记录中(不连接),因此结果看起来像
12345
22345
64554
我能够使用Locate值解析字符串,但我不确定如何使用single locate命令从数据中获取多个值。在SQL Server中,这对我来说没有问题。
编辑:我意识到我可能在循环中使用substring_index但是我宁愿不在字符串中运行循环。
答案 0 :(得分:0)
这个解决方案怎么样:
SELECT
SUBSTRING(REPLACE(SUBSTRING_INDEX(c, '|', 2), SUBSTRING_INDEX(c, '|', 1), ''), 2) AS 'TST'
FROM
test_data
WHERE SUBSTRING_INDEX(c, '|', 1) = 'TST';
<强> 输出 :
+-------+
| TST |
+-------+
| 12345 |
| 22345 |
| 67554 |
+-------+
使用mysql's SUBSTRING_INDEX
函数,您可以在分隔符(|
)计数出现之前从字符串中提取子字符串,并与REPLACE
和SUBSTRING
结合使用,您可以提取所需的值。
或者,如果您的第二个字段具有固定长度,则:
SELECT
SUBSTRING(c, 5, 5) AS 'TST'
FROM
test_data
WHERE SUBSTRING(c, 1, 3) = 'TST';
查看demo here。
test_data
表如下所示:
CREATE TABLE test_data (c TEXT);
INSERT INTO test_data(c) VALUES
('BGN|1'),
('TST|12345|5'),
('END|1'),
('BGN|2'),
('TST|22345|6'),
('END|2'),
('BGN|3'),
('TST|67554|7'),
('END|3');