Mysql 使用正则表达式将一列拆分为多列
我有一张表和一些数据:Mysql 使用正则表达式将一列拆分为多列,mysql,regex,Mysql,Regex,我有一张表和一些数据: -- Table CREATE TABLE IF NOT EXISTS `myTable` ( `myColumn` varchar(32) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; -- Data INSERT INTO `myTable` (`myColumn`) VALUES ('AAA BBB CCC'), ('AA BB CCCC'), ('BBB CC AAAA'), ('C AAA BBB'),
-- Table
CREATE TABLE IF NOT EXISTS `myTable` (
`myColumn` varchar(32) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-- Data
INSERT INTO `myTable` (`myColumn`) VALUES
('AAA BBB CCC'),
('AA BB CCCC'),
('BBB CC AAAA'),
('C AAA BBB'),
('CCC AA BBB');
我想运行一个返回3列的SELECT
查询
这些列应称为A
、B
和C
结果应该类似于:
+------+-----+------+
| A | B | C |
+------+-----+------+
| AAA | BBB | CCC |
| AA | BB | CCCC |
| AAAA | BBB | CC |
| AAA | BBB | C |
| AA | BBB | CCC |
+------+-----+------+
我有三个正则表达式,通过使用它们,可以匹配所有数据:
^([A]+) ([B]+) ([C]+)$
^([B]+) ([C]+) ([A]+)$
^([C]+) ([A]+) ([B]+)$
是否可以使用这些正则表达式生成这样的结果
如果是这样的话,请举个例子,即使只是针对问题的一个子集。在MySQL中使用正则表达式是无法做到的。不幸的是,MySQL只支持将正则表达式作为布尔条件(特别是在where子句中),而不支持提取或更改字符串的内容 但是,您可以通过使用MySQL查询完全实现所描述的内容。下面是您的场景的使用示例
SELECT substring_index(substring_index(myColumn, ' ', 1), ' ', -1) AS `A`,
substring_index(substring_index(myColumn, ' ', 2), ' ', -1) AS `B`,
substring_index( myColumn , ' ', -1) AS `C`
FROM ...
或者,如果您必须绝对使用正则表达式,那么您可以将MySQL的输出通过管道传输到某个正则表达式引擎。问我你是否需要更多关于这个策略的信息