我可以在MYSQL选择中匹配和替换文本模式吗?
修改 现在它的答案似乎是:无法完成, 因为你无法捕捉匹配的内容(来自Eric的回答/评论)。现在我将考虑添加一个查找表。
简化示例:
MySQL表Coleridge拥有许多字符串,如:
text
------------------------------------
In_Xanadu_did_Kubla_Khan
A_stately_pleasure_dome_decree
Where_Alph_the_sacred_river_ran
Through_caverns_measureless_to_man
Down_to_a_sunless_sea
有没有办法表达选择
SELECT text = ~s / [^ _] + _(。*)_ [^ _] + $ / \ 1 / 替换为来自Coleridge
并获取
replaced
________________________
Xanadu_did_Kubla
stately_pleasure_dome
Alph_the_sacred_river
caverns_measureless_to
to_a_s
请注意:
答案 0 :(得分:5)
没有正则表达式来替换MySQL中的任何东西。您可以在基于RegEx(regexp
)的MySQL中进行匹配,但这不会返回匹配的部分,只返回整个列。但是,你可以这样使用replace
:
select replace(col, 'e', 'i') from tbl
这会将regex
作为rigix
返回。
至于您的具体示例,您必须使用locate
和substring
的组合:
select
substring(col
, locate('_', col)+1
, locate('_', reverse(col))-(len(col)-locate('_', col)-1))
from tbl
关于数据库级别的字符串操作/处理的一般规则是:保持简单。 RDBMS是集合思考,而这就是它们闪耀的地方。拉动单个弦乐操作并不是他们的最佳选择。因此,没有任何RDBMS具有真正成熟的字符串处理功能(并且在不同的处理函数之间肯定没有任何一致性)。如果你的正则表达式相当复杂,你很可能只想在表示/应用层上处理它,而不是在数据库中处理它。
答案 1 :(得分:2)
RLIKE
)的正则表达式,而不是替换。