postgres substring escape开括号字符

时间:2017-08-31 22:34:37

标签: postgresql escaping postgresql-9.3 brackets

我试图从postgres中的字符串字段返回括号内的所有字符:

此功能似乎运作良好:

 select substring('foo bar [foobar] foo' from '%#"f%b#"%' for '#');
 substring
-----------
 foob

它不适用于开括号字符:

select substring('foo bar [foobar] foo' from '%#"[%]#"%' for '#');
substring
-----------

关闭括号工作正常, 我试过反斜杠,双反斜杠,句号,单引号

1 个答案:

答案 0 :(得分:0)

你应该转义括号,因为它们是元字符:

select substring('foo bar [foobar] foo' from '%#"#[%#]#"%' for '#');

 substring 
-----------
 [foobar]
(1 row) 

select substring('foo bar [foobar] foo' from '%#[#"%#"#]%' for '#');

 substring 
-----------
 foobar
(1 row)

来自the documentation

  

除了从LIKE借来的这些设施之外,SIMILAR TO还支持从POSIX正则表达式中借用的这些模式匹配元字符:

     

...

     
      
  • 括号表达式[...]指定一个字符类,就像在POSIX正则表达式中一样。
  •