MySQL(MariaDB 10.1)使用REGEX查找并替换/删除字符串

时间:2017-05-24 16:42:32

标签: mysql regex mariadb

我有许多产品的备注栏,其中包含以下内容(以及其他信息):

<p><em><strong>Item dropped from ESP datafeed and pricing removed from site on 02-17-2017. May still be available.</strong></em></p>

02-17-2017约会我的更改(但始终采用该格式)。我是否可以仅使用数据库查询来查找和删除这些字符串(保留列中的其余数据,如MySQL REPLACE(),但使用正则表达式来匹配日期)或者我是否需要在PHP中执行此操作? / p>

2 个答案:

答案 0 :(得分:1)

WHERE notes LIKE '<p><em><strong>Item dropped from ESP datafeed and pricing removed from site on %. May still be available.</strong></em></p>'

请注意,我在字符串中添加了%

我不明白“删除那些字符串” - 你想用空字符串替换它们吗? NULL?删除包含notes列中?别的什么?我希望WHERE条款足以让你朝着正确的方向前进。

注意:REGEXP是'过度杀伤'; LIKE就足够了。

如果你想删除日期但保留其余的字符串,那么这不会吗?...

UPDATE tbl
    SET notes = '<p><em><strong>Item dropped from ESP datafeed and pricing removed from site on xxxxxxxxxxx. May still be available.</strong></em></p>'
    WHERE notes LIKE '<p><em><strong>Item dropped from ESP datafeed and pricing removed from site on %. May still be available.</strong></em></p>';

(或者你想把它作为占位符。)

MariaDB-10.0.5包含:REGEXP_REPLACE(),REGEXP_INSTR()和REGEXP_SUBSTR();但我不认为它们对你的情况是必要的。

答案 1 :(得分:0)

我能够做到:

UPDATE `ii_Product` 
SET `notes`= REGEXP_REPLACE(`notes`, '\n?<p><em><strong>Item dropped from ESP datafeed and pricing removed from site on .*\. May still be available.<\/strong><\/em><\/p>\n?\n?', '')