2015-03-13 32 views
3

我正在使用PostgreSQL,並且想知道是否可以使通配符保留其值。使用相同的通配符匹配模式

因此,例如,說我有

select * from tableOne where field like ‘_DEF_’; 

是否有一種方式來獲得第一和最後一個通配符是完全一樣的人物?

所以一個匹配結果的例子可能是:ADEFA或ZDEFZ。

+0

本手冊的相關部分是http://www.postgresql.org/docs/current/interactive/functions-matching.html – IMSoP 2015-03-13 13:12:30

回答

4

您可以使用正則表達式與反向引用:

select * 
from some_table 
where some_column ~* '^(.)DEF(\1)$' 

^(.)DEF(\1)$是指:在一開始有些字符後跟DEF之後的第一個字符必須出現在字符串的結尾。

()定義了一組與\1引用所述第一組(它是在輸入序列中的第一個字符在這個例子中)

SQLFiddle例如:http://sqlfiddle.com/#!15/d4c4d/1

+0

感謝您的解釋。真的有幫助! – lenhun 2015-03-13 13:31:37

+0

也許使用'〜'而不是'〜*'來匹配問題中區分大小寫的'LIKE'。 – 2015-03-13 17:06:29

+0

第二對括號可能會被刪除。我們不想重新捕捉那個。 – 2015-03-20 19:52:04

0

使用正則表達式:

with test as (
    select 'xABa' as foo 
    union select 'xABx' 
    union select 'xJBx' 
) 
select * from test 
where foo ~* E'^(.)AB\\1$' 

輸出:

foo 
------ 
xABx 
(1 row) 
+0

雖然答案很好,但與早前5分鐘已經發布的a_horse相同。它不添加任何內容,應該刪除。 – 2015-03-13 17:04:25