mysql - 在 MySQL 中更新包含 KEYWORD 语句的字符串的 LENGTH 部分
问题描述
我找不到我想做的正确的 MySQL 语法,我什至想知道这是否可能。让我解释 :
我有一个包含“路径”列的“文件夹”表。注册了3个文件夹:
- \汽车保险
- \车险\车险
- \车险\车险\摩托车险
如您所见,前 2 个文件夹具有相同的名称。第二个文件夹包含在第一个文件夹中,第三个文件夹包含在第二个文件夹中。
假设我将第一个文件夹移动到名为“Mr Jones”的文件夹中。所以我想更新路径以获得以下结果:
- \琼斯先生\汽车保险
- \琼斯先生\汽车保险\汽车保险
- \琼斯先生\汽车保险\汽车保险\摩托车保险
我的 MySQL 查询如下:
UPDATE folder SET path = REPLACE (path, '\\car insurance', '\\Mr Jones\\car insurance') WHERE path LIKE '\\\\car insurance%';
该查询的问题是最后我得到以下路径:
- \琼斯先生\汽车保险
- \琼斯先生\汽车保险\琼斯先生\汽车保险
- \琼斯先生\汽车保险\琼斯先生\汽车保险\摩托车保险
实际上,该查询将所有出现的“\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%';
该查询的问题在于它完全覆盖了字符串的其余部分。这是结果:
- \琼斯先生\汽车保险
- \琼斯先生\汽车保险
- \琼斯先生\汽车保险
我的问题是以下一个:
是否可以只更新包含“KEYWORD”句子的字符串的“LENGTH”部分而不删除整个字符串?
提前感谢您的回答,对不起我的英语,我是法国人......
解决方案
好的,我找到了一个解决方案,所以我会回答我自己的问题,也许有一天会对某人有所帮助......
我在 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%';
有点长,但它的工作...
推荐阅读
- java - Spring Boot 2.0 未注册自定义执行器端点 Bean
- java - 如何使用“reduce”将此循环转换为函数表达式?
- vba - Excel 数据透视表宏导致“无效的过程调用或参数”错误
- r - 编写用户声明的函数时 [] 参数无效
- c# - WCF 一些用 OperationContract 装饰的方法没有向客户端显示(未公开)
- swift - 消息:“libc++abi.dylib:当我在 swift xcode 项目中按下按钮时,在我的控制台中以 NSException (lldb) 类型的未捕获异常终止
- video-streaming - 在线视频流的网络分析
- apache-spark - 如何阻止 Spark 结构化流每次都列出 S3 存储桶中的所有文件
- opencv - cv2.projectPoints 实际上是如何工作的?
- r - 如何使用 dist() 函数计算组内的成对距离