Mysql与正则表达式连接

kmbjn2e3  于 2022-11-28  发布在  Mysql
关注(0)|答案(1)|浏览(113)

请提供以下sql:
我希望将值类似“优先级:1”替换为“优先级:2”。但是,要查找的文本可以是“Priority:1”OR“优先级:2”OR“优先级:3”等。我想使用regexp沿着concat来查找与该模式匹配的任何值
字段中完整数据的示例:

<span class='badge badge-info'>Priority: 1</span><br>&bull; Lead submitted: <br>&bull; Existing customer: <br>&bull; Car of interest:

在这种情况下,我想将“优先事项:1”替换为“优先级:2英寸
目前的SQL ...

UPDATE
  response
SET
  notes = REPLACE(
    notes,
    CONCAT('Priority: ', REGEXP '\d'),
    'Priority: 3'
  )
WHERE actionid = '2198602'
wmomyfyw

wmomyfyw1#

您在上面的注解中提到您使用的是MySQL 5.x,因此REGEXP_REPLACE()函数不可用。
这意味着您有几种选择:

替换固定字符串,一次替换一个。

UPDATE
  response
SET
  notes = REPLACE(
    notes,
    'Priority: 1',
    'Priority: 3'
  )
WHERE actionid = '2198602';

然后对“优先级:2“和另一个更新的任何其他值,你需要改变。

以嵌套方式替换固定字符串。

一个REPLACE()的结果是一个字符串,您可以将其用作另一个REPLACE()的第一个参数。将针对每个输入模式检查该字符串,并进行替换。

UPDATE
  response
SET
  notes = REPLACE(
    REPLACE(
      notes,
      'Priority: 1',
      'Priority: 3'
    ),
    'Priority: 2',
    'Priority: 3'
  )
WHERE actionid = '2198602';

将值提取到客户端应用程序中

选择一个值,获取它,然后你可以使用正则表达式来进行字符串替换。实际上每种语言都以某种方式支持正则表达式。

升级到MySQL 8.0

显而易见的选项。然后可以使用REGEXP_REPLACE()。
请注意,MySQL 5.7将于2023年10月停产,距离我们撰写本文的时间不到一年。您应该已经在考虑升级到8.0。

相关问题