在Postgres中替换为未定义的字符

时间:2017-02-06 18:13:18

标签: postgresql replace sql-update

我需要使用Postgres的UPDATE函数执行Replace()脚本,但我不知道我必须替换的确切字符串,我想知道是否有某种方法我可以使用LIKEWildcards运算符类似地执行此操作 我的问题是我得到了一个包含一些脚本的表,并且在每个脚本的末尾有一个标记<signature>,如下所示:

  

'SELECT SCRIPT WHATEVER ....&lt;签名&GT; 782798e2a92c72b270t920b&LT;签名&GT;'

我需要做的是:

UPDATE table SET script = REPLACE(script,'<signature>%<signature>','<signature>1234ABCDEF567890<signature>')

无论签名是什么,我都需要替换为我定义的新签名。我知道使用'%'不起作用,只是为了说明我想要执行的效果。在Postgres 9.5中有没有办法做到这一点?

2 个答案:

答案 0 :(得分:0)

 with expr
 as 
 (select 'Hello <signature>thisismysig</signature>'::text as
     full_text, '<signature>'::text as open, 
     '</signature>'::text as close
 )

 select  
   substring(full_text from 
      position(open in full_text)+char_length(open)
      for 
      position(close in full_text)- char_length(open)-position(open in full_text)
   )

注意:添加部分是为了便于理解(希望如此)。

答案 1 :(得分:0)

使用POSIX正则表达式执行与其他答案相同的操作(但更短)

 select
 substring('a bunch of other stuff <signature>mysig</signature>' 
   from '<signature>(.*?)</signature>')