lex*_*exu 5 regex mysql replace
我可以在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
Run Code Online (Sandbox Code Playgroud)
有没有办法表达选择
SELECT text = ~s/[^ _] + _(.*)_ [^ _] + $ /\1 /替换为来自Coleridge
得到
replaced
________________________
Xanadu_did_Kubla
stately_pleasure_dome
Alph_the_sacred_river
caverns_measureless_to
to_a_s
Run Code Online (Sandbox Code Playgroud)
请注意:
没有正则表达式来替换MySQL中的任何东西.您可以在基于RegEx(regexp)的MySQL中进行匹配,但这不会返回匹配的部分,只返回整个列.但是,您可以这样使用replace:
select replace(col, 'e', 'i') from tbl
Run Code Online (Sandbox Code Playgroud)
这将返回regex为rigix.
至于你具体的例子,你必须使用的组合locate和substring:
select
substring(col
, locate('_', col)+1
, locate('_', reverse(col))-(len(col)-locate('_', col)-1))
from tbl
Run Code Online (Sandbox Code Playgroud)
关于数据库级别的字符串操作/处理的一般规则是:保持简单.RDBMS是集合思考,而这就是它们闪耀的地方.拉动单个弦乐操作并不是他们的最佳选择.因此,没有任何RDBMS具有真正成熟的字符串处理功能(并且在不同的处理函数之间肯定没有任何一致性).如果您的正则表达式相当复杂,您很可能只想在演示文稿/应用层上处理它,而不是在数据库中处理它.
| 归档时间: |
|
| 查看次数: |
1283 次 |
| 最近记录: |