2017-08-31 96 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正則表達式。