一、模式匹配
pg中提供3種模式匹配的方法:傳統SQL LIKE 操做;最近的SIMILAR TO操做(1999添加到SQL);POSIX-style正則表達式。
函數可用來提取or替換一個匹配的子字符串從匹配的位置。若你有超越這種模式匹配的需求,能夠考慮在Perl或Tcl中寫一個自定義的函數。
1.一、傳統SQL LIKE 操做
string LIKE pattern [ESCAPE escape-character]
string NOT LIKE pattern [ESCAPE escape-character]
若string匹配提供的pattern,則like表達式返回true,NOT與之相反。
若pattern中不含有"%" 或"_"符號,則pattern僅僅表明string本身,這種狀況下LIKE操做符就像等於操做符。
"_":匹配任何單個字符
"%":匹配任何序列的0個或多個字符
如:
'abc' LIKE 'abc' true
'abc' LIKE 'a%' true
'abc' LIKE '_b_' true
'abc' LIKE 'c' false
LIKE模式匹配老是涉及整個字符串,所以,若想要匹配一個字符串中任何一個序列,則該pattern須要以"%"開始和結尾。
匹配字面的"%" 或"_"符號,經過在pattern中使用escape字符(轉義字符),默認的轉義字符是一個"\",但也可使用ESCAPE從句。爲匹配escape字符自己,須要寫2個escape字符。
也能夠經過寫 ESCAPE ''來選擇no escape字符,這將有效的禁止escape機制,從而使它不可能關掉"%" 或"_"符號的特殊意義。
關鍵字ILIKE能夠替換LIKE,根據活動的地區使得大小寫不敏感。此不是SQL標準倒是PG擴展
"~~" 等價於 LIKE;"~~*" 等價於 ILIKE("!~~"/"!~~*"表明NOT LIKE 和NOT ILIKE)
1.二、SIMILAR TO正則表達式
string SIMILAR TO pattern [ESCAPE escape-character]
string NOT SIMILAR TO pattern [ESCAPE escape-character]
相似於LIKE,除了它解析pattern使用SQL標準正則表達式外,SQL正則表達式在LIKE符號和通用正則表達式符號之上。
只有它的pattern匹配整個字符串時,該SIMILAR TO成功。這是不一樣於常見的正則表達式的行爲模式能夠匹配任何字符串的一部分。也像LIKE,SIMILAR TO 使用"%" 或"_"符號做爲一個通配符表明任何字符串or單個字符。
除了借用了LIKE的這些特性, SIMILAR TO 借用POSIX正則表達式支持模式匹配的通配符:
| 2個選擇中的任何一個
* 重複前一個項0次or更屢次
+ 重複前一個項1次or更屢次
? 重複前一個項0次or 1次
{m} 重複前一個項m次
{m,} 重複前一個項m次or更屢次
{m,n} 重複前一個項至少m次,不超過n次
Parentheses() 組合項到一個邏輯項
[...] 指明一個字符類,就像在POSIX正則表達式裏的同樣
如:
'abc' SIMILAR TO 'abc' true
'abc' SIMILAR TO 'a' false
'abc' SIMILAR TO '%(b|d)%' true
'abc' SIMILAR TO '(b|c)%' false正則表達式
substring(string from pattern for escape-character),提供抽取匹配SQL正則表達式的子字符串函數,與使用SIMILAR TO同樣,指定的pattern必須匹配整個字符串,
不然函數失敗並返回null,返回標識模式的一部分表示成功,pattern必須包含2個出現的escape字符緊隨其後的是一個雙引號",文本匹配模式的一部分返回這些標記之間。
如:#"限制返回字符串
substring('foobar' from '%#"o_b#"%' for '#') oob
substring('foobar' from '#"o_b#"%' for '#') NULL函數
1.三、POSIX-style正則表達式字符串
正則表達式匹配操做符:
操做符 描述 例子
~ 匹配正則表達式,大小寫敏感 'thomas' ~ '.*thomas.*'
~* 匹配正則表達式,大小寫不敏感 'thomas' ~* '.*Thomas.*'
!~ 不匹配正則表達式,大小寫敏感 'thomas' !~ '.*Thomas.*'
!~* 不匹配正則表達式,大小寫不敏感 'thomas' !~* '.*vadim.*'
POSIX正則表達式爲模式匹配提供比使用LIKE和SIMILAR TO更強大的方式。
正則表達式是一個縮寫的定義一組字符串的一個字符序列string