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

时间:2015-11-09 06:35:44

标签: sql postgresql

我有一个名为" OptionsDetail"列名为" URL"在postgresql数据库中。 " URL"列包含以下数据

URL

http://www.site1.com/ebw/file1/detail.action?cid=1
http://www.another2.com/ebw/file1/detail.action?cid=11&code=MYCODE
http://www.anothersite3.com/ebw/file1/detail.action?cid=12&code=ANOTHERCODE&option=ROOM

现在我想将URL中的数据替换为

URL

/file1/detail.action?cid=1
/file1/detail.action?cid=11&code=MYCODE
/file1/detail.action?cid=12&code=ANOTHERCODE&menu=ROOM

我编写了以下查询来执行上述功能

 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%';

查询正在成功执行,例如ex:200行受影响,但" URL"列数据没有改变我需要的方式,数据保持不变。

请帮我解决此问题

1 个答案:

答案 0 :(得分:1)

问题是replace不支持%之类的通配符:

replace("URL",'http://%/ebw/file1','/file1')
                     ^^^

您可以改为使用regexp_replace

UPDATE  YourTable
SET     URL = regexp_replace(URL, 'http://.*/ebw/file1', '/file1') 
WHERE   URL LIKE '%/ebw/file1%'

请注意,regexp_replace使用的通配符与like不同。在正则表达式中,“任意数量的任何字符”都是.*而不是%

See it working at SQL Fiddle.