SQL:Regexp_replace 但仅在值第一次出现在记录中时
Posted
技术标签:
【中文标题】SQL:Regexp_replace 但仅在值第一次出现在记录中时【英文标题】:SQL: Regexp_replace but only the first time a value appears in record 【发布时间】:2021-10-31 14:21:48 【问题描述】:我在留言栏有帖子内容。
我想用 X 搜索和替换模式,但只有第一次模式出现在记录中,因为它可能出现多次。
下面的查询显然会用 X 替换所有模式实例
UPDATE xf_post SET message = REGEXP_REPLACE (message, 'pattern', 'X');
在 oracle db 上使用此命令非常简单。
UPDATE xf_post SET message = REGEXP_REPLACE (message , 'pattern', 'X', 1, 1);
但是服务器有 mariadb ????我不知道该怎么做。
【问题讨论】:
在 MariaDB 中没有额外的参数可以设置替换的数量,所有出现的地方都会被替换。当替换模式包含对找到的模式组的引用时,没有简单的方法可以模拟这一点。如果替换是文字,则使用 REGEXP_INSTR() 查找模式,定义其位置和长度,然后将其剥离并使用两个 SUBSTRING() 替换。 【参考方案1】:一个 REGEXP_REPLACE 模拟示例,仅具有第一次出现替换。
SELECT txt,
CONCAT(LEFT(txt, LOCATE(REGEXP_SUBSTR(txt,'pattern'), txt) - 1),
REGEXP_REPLACE(REGEXP_SUBSTR(txt,'pattern'), 'pattern', 'replacement'),
SUBSTRING(txt FROM LOCATE(REGEXP_SUBSTR(txt,'pattern'), txt) + LENGTH(REGEXP_SUBSTR(txt,'pattern')))) output
FROM test
fiddle with the explanations
【讨论】:
以上是关于SQL:Regexp_replace 但仅在值第一次出现在记录中时的主要内容,如果未能解决你的问题,请参考以下文章
MS SQL Server 在空格上拆分单词,但仅在不在双引号中时