2017-06-23 76 views
0

是否可以用另一个字符串替换字符串的特定部分? 例如我有一个包含文件路径的列,我将文件夹下载到门户(在我的物理硬盘上)更名为download_portal,所以我必须更改数千条数据库记录中的路径。SQL - 替换多个记录中字符串的特定部分

实例记录之前和之后:

/fileadmin/download portal/test/myfile.jpg 

后:

/fileadmin/download_portal/test/myfile.jpg 

假设这是我的表水果

id | path 
1 | /fileadmin/download portal/test/apple.jpg 
2 | /fileadmin/download portal/test/banana.jpg 
3 | /fileadmin/download portal/test/pineapple.jpg 

我怎样才能改变download portaldownload_portal在每个记录中使用SQL?我可以通过使用regular expressions来解决吗?

+0

阅读有关更换funtion。请添加您正在使用的dbms标签 – Jens

+0

['replace'](https://dev.mysql.com/doc/refman/5.6/en/string-functions.html#function_replace)? – Passerby

回答

4

我不认为你一定需要这里的正则表达式替换。只需要正常更换download portaldownload_portal即可正常工作。下面UPDATE应该在大多数数据库工作:

UPDATE fruits 
SET path = REPLACE(path, '/download portal/', '/download_portal/') 
WHERE path LIKE '%/download portal/%' 

注:我想寻找/download portal/是更严格,更安全,不仅仅是纯文本。这是因为它消除了意外更换download portal的机会,该机会显示为其他较大路径名称的一部分。

+0

这工作thx!我想知道这是否也适用于正常表达。 – Black

+0

上面的查询应该可以正常工作。 –

+0

如果你真的在使用MySQL,那么答案是否定的,因为MySQL不支持正则表达式替换,至少不是没有编写自己的用户定义函数。也许你很幸运,因为正常的替换应该涵盖你的用例。 –

1

如果您使用的是SSMS,您可以使用REPLACE Function来获得您想要的。

更新表名SET ColumnToChange = REPLACE(ColumnToChange, 'x_name', 'x_myname')