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

标签 sql postgresql

我在 postgresql 数据库中有一个名为“OptionsDetail”的表,其中列名为“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中的数据替换为

网址

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

查询正在成功执行,例如:200 行受影响,但“URL”列数据未按我需要的方式更改,数据保持原样。

请帮我解决这个问题

最佳答案

问题是 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.

关于sql - 使用模式匹配字符的 postgresql 替换函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33603639/

相关文章:

SQL:添加两个求和字段并将求和值与另一个字段值进行比较

java - 条件 SQL 查询和 JDBC

ruby-on-rails - 我如何在 Rails 迁移中创建一个接受 18 位数字的中间件?

sql - 如何将 ARRAY 包含运算符与 ANY 一起使用

mysql - 将 SQL 查询转换为 JPQL

sql - 为什么 Oracle SQL 中的这个正则表达式会丢失字符串的开头?

python - 使用 Python 或 R 将非常大的 sql 文件导出到 csv

sql - 列名包含下划线时的语法错误

sql - 如何更新 JSONB 数组中的多个值 Postgresql 数组对象

sql - 非常复杂的数据库架构,如何处理呢?