我正在使用PostgreSQL,並且想知道是否可以使通配符保留其值。使用相同的通配符匹配模式
因此,例如,說我有
select * from tableOne where field like ‘_DEF_’;
是否有一種方式來獲得第一和最後一個通配符是完全一樣的人物?
所以一個匹配結果的例子可能是:ADEFA或ZDEFZ。
我正在使用PostgreSQL,並且想知道是否可以使通配符保留其值。使用相同的通配符匹配模式
因此,例如,說我有
select * from tableOne where field like ‘_DEF_’;
是否有一種方式來獲得第一和最後一個通配符是完全一樣的人物?
所以一個匹配結果的例子可能是:ADEFA或ZDEFZ。
您可以使用正則表達式與反向引用:
select *
from some_table
where some_column ~* '^(.)DEF(\1)$'
^(.)DEF(\1)$
是指:在一開始有些字符後跟DEF
之後的第一個字符必須出現在字符串的結尾。
的()
定義了一組與\1
引用所述第一組(它是在輸入序列中的第一個字符在這個例子中)
SQLFiddle例如:http://sqlfiddle.com/#!15/d4c4d/1
感謝您的解釋。真的有幫助! – lenhun 2015-03-13 13:31:37
也許使用'〜'而不是'〜*'來匹配問題中區分大小寫的'LIKE'。 – 2015-03-13 17:06:29
第二對括號可能會被刪除。我們不想重新捕捉那個。 – 2015-03-20 19:52:04
使用正則表達式:
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)
雖然答案很好,但與早前5分鐘已經發布的a_horse相同。它不添加任何內容,應該刪除。 – 2015-03-13 17:04:25
本手冊的相關部分是http://www.postgresql.org/docs/current/interactive/functions-matching.html – IMSoP 2015-03-13 13:12:30