首页 > 解决方案 > 在 MySQL 中更新包含 KEYWORD 语句的字符串的 LENGTH 部分

问题描述

我找不到我想做的正确的 MySQL 语法,我什至想知道这是否可能。让我解释 :

我有一个包含“路径”列的“文件夹”表。注册了3个文件夹:

  1. \汽车保险
  2. \车险\车险
  3. \车险\车险\摩托车险

如您所见,前 2 个文件夹具有相同的名称。第二个文件夹包含在第一个文件夹中,第三个文件夹包含在第二个文件夹中。

假设我将第一个文件夹移动到名为“Mr Jones”的文件夹中。所以我想更新路径以获得以下结果:

  1. \琼斯先生\汽车保险
  2. \琼斯先生\汽车保险\汽车保险
  3. \琼斯先生\汽车保险\汽车保险\摩托车保险

我的 MySQL 查询如下:

UPDATE folder SET path = REPLACE (path, '\\car insurance', '\\Mr Jones\\car insurance') WHERE path LIKE '\\\\car insurance%';

该查询的问题是最后我得到以下路径:

  1. \琼斯先生\汽车保险
  2. \琼斯先生\汽车保险\琼斯先生\汽车保险
  3. \琼斯先生\汽车保险\琼斯先生\汽车保险\摩托车保险

实际上,该查询将所有出现的“\car insurance”替换为“\Mr Jones\car insurance”。所以第一个路径是正确的,但其他路径是错误的。

所以我试图将替换限制为每条路径的前 15 个字符。

UPDATE folder SET path = REPLACE (SUBSTRING(path, 1, 14), '\\car insurance', '\\Mr Jones\\car insurance') WHERE path LIKE '\\\\car insurance%';

该查询的问题在于它完全覆盖了字符串的其余部分。这是结果:

  1. \琼斯先生\汽车保险
  2. \琼斯先生\汽车保险
  3. \琼斯先生\汽车保险

我的问题是以下一个:

是否可以只更新包含“KEYWORD”句子的字符串的“LENGTH”部分而不删除整个字符串?

提前感谢您的回答,对不起我的英语,我是法国人......

标签: mysqlsql-update

解决方案


好的,我找到了一个解决方案,所以我会回答我自己的问题,也许有一天会对某人有所帮助......

我在 LENGTH 子串中更改了我想要更改的内容,然后我将原始字符串的末尾附加了一个 concat ... 结果如下所示:

UPDATE folder SET path = CONCAT(REPLACE((SELECT SUBSTRING(path, 1, 14) AS StringtoReplace), '\\car insurance', '\\Mr Jones\\car insurance'), (SELECT SUBSTRING(path, 15) AS StringtoAdd)) WHERE path LIKE '\\\\car insurance%';

有点长,但它的工作...


推荐阅读