2010-10-06 48 views
3

我知道RLIKEREGEX运营商的存在,但它似乎不能用于此。有没有办法从MySQL中的正则表达式中提取子匹配?

是否有一个功能或操作,这将有助于我实现分裂的文本字段,并选择它作为两个或多个不同的领域:

SELECT $1 as `field_a`, $2 as `field_b` FROM `table` WHERE `field` RLIKE '^(.+):(.+)$'; 

我写一个日志分析器所以这将是非常方便的在没有额外文本处理的情况下在SQL中执行该操作。

回答

1

所以你只是想在第一次出现“:”时分割字符串?

有几种方法可以在MySQL中实现这一点。

使用你的例子,这里有两种方法脱离我的头顶。希望他们对你有所帮助:

select substr(`field`,1,instr(`field`,':')-1) as `field_a`, 
    substr(`field`,instr(`field`,':')+1) as `field_b` 
FROM `table` 
WHERE `field` RLIKE '^(.+):(.+)$'; 

select left(`field`,instr(`field`,':')-1) as `field_a`, 
    right(`field`,length(`field`)-instr(`field`,':')) as `field_b` 
FROM `table` 
WHERE `field` RLIKE '^(.+):(.+)$'; 
+0

在特定的情况下你的例子可以工作,但我要求一个更普遍的问题。 – 2010-10-06 14:31:19

+0

你是正确的,RLIKE和REGEX不能用来提取子匹配。您需要使用其他字符串函数,如我的示例中的函数。 – 2010-10-06 15:09:12

相关问题