2017-08-31 53 views
1

我想从一个字符串字段中的Postgres返回括号内的所有字符:Postgres的子串逃逸开括号字符

这个功能似乎运作良好:

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

它不会以开放的合作括号字符:

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

的密切支架做工精细, 我试过反斜杠,双反斜线,期间,单引号

回答

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借用的,类似于支持这些从POSIX正则表达式借用的模式匹配元字符:

...

  • 方括号表达式[...]指定的字符类,正如在POSIX正则表达式。