我有一张桌子和一些数据:
-- 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]+)$
是否可以使用这些正则表达式来产生这样的结果?
如果是这样,请欣赏一个例子,即使只是问题的一个子集。
答案 0 :(得分:1)
在MySQL中使用正则表达式无法做到这一点。不幸的是,MySQL支持regex只作为一个布尔条件(特别是在where子句中),但不提取或改变字符串的内容。
然而,您可以使用substring_index从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的输出传递给某些正则表达式引擎。如果您需要有关此策略的更多信息,请询问我。