使用模式匹配字符的postgresql替换函数

使用模式匹配字符的postgresql替换函数,sql,postgresql,Sql,Postgresql,我在postgresql数据库中有一个名为“OptionsDetail”的表,其列名为“URL”。“URL”列包含以下数据 统一资源定位地址 现在我想将URL中的数据替换为 统一资源定位地址 我编写了以下查询来执行上述功能 UPDATE "OptionsDetail" SET "URL" = replace("URL",'http://%/ebw/file1','/file1') WHERE "URL" LIKE '%/ebw/file1%'; 还有另一种我这样写的方式 UPDAT

我在postgresql数据库中有一个名为“OptionsDetail”的表,其列名为“URL”。“URL”列包含以下数据

统一资源定位地址 现在我想将URL中的数据替换为

统一资源定位地址 我编写了以下查询来执行上述功能

 UPDATE  "OptionsDetail" SET "URL" = replace("URL",'http://%/ebw/file1','/file1') WHERE  "URL" LIKE  '%/ebw/file1%';
还有另一种我这样写的方式

  UPDATE  "OptionsDetail" SET "URL" = replace("URL",'%/ebw/file1','/file1') WHERE  "URL" LIKE  '%/ebw/file1%';
查询正在成功执行,例如:200行受影响,但“URL”列数据没有改变我需要的方式,数据保持原样


请帮助我解决此问题

问题是
replace
不支持通配符,如
%

replace("URL",'http://%/ebw/file1','/file1')
                     ^^^
您可以改为使用:

请注意,
regexp\u replace
使用的通配符与
类似的通配符不同。在正则表达式中,“任意字符的任意数”是
*
而不是
%


replace
不支持通配符。您需要
regexp\u replace
我注意到的一件事是,如果在
regexp\u replace
中使用
%
而不是
,它将充当非捕获通配符,因此匹配的任何内容都不会被替换。
  UPDATE  "OptionsDetail" SET "URL" = replace("URL",'%/ebw/file1','/file1') WHERE  "URL" LIKE  '%/ebw/file1%';
replace("URL",'http://%/ebw/file1','/file1')
                     ^^^
UPDATE  YourTable
SET     URL = regexp_replace(URL, 'http://.*/ebw/file1', '/file1') 
WHERE   URL LIKE '%/ebw/file1%'