來源:http://www.postgres.cn/docs/11/ 9.7. 模式匹配 PostgreSQL提供了三種獨立的實現模式匹配的方法:SQL LIKE操作符、更近一些的SIMILAR TO操作符(SQL:1999 里添加進來的)和POSIX-風格的正則表達式。除了這些基本的“這個串匹配這 ...
來源:http://www.postgres.cn/docs/11/
9.7. 模式匹配
PostgreSQL提供了三種獨立的實現模式匹配的方法:SQL LIKE
操作符、更近一些的SIMILAR TO
操作符(SQL:1999 里添加進來的)和POSIX-風格的正則表達式。除了這些基本的“這個串匹配這個模式嗎?”操作符外,還有一些函數可用於提取或替換匹配子串併在匹配位置分離一個串。
9.7.1. LIKE
在pattern
里的下劃線 (_
)代表(匹配)任何單個字元; 而一個百分號(%
)匹配任何零或更多個字元的序列。
要匹配文本的下劃線或者百分號,而不是匹配其它字元, 在pattern
里相應的字元必須 前導逃逸字元。預設的逃逸字元是反斜線,但是你可以用ESCAPE
子句指定一個不同的逃逸字元。 要匹配逃逸字元本身,寫兩個逃逸字元。
關鍵字ILIKE
可以用於替換LIKE
, 它令該匹配根據活動區域成為大小寫無關。這個不屬於SQL標準而是一個PostgreSQL擴展。
操作符~~
等效於LIKE
, 而~~*
對應ILIKE
。 還有 !~~
和!~~*
操作符分別代表NOT LIKE
和NOT ILIKE
。所有這些操作符都是PostgreSQL特有的。
9.7.2. SIMILAR TO
正則表達式
SIMILAR TO
操作符根據自己的模式是否匹配給定串而返回真或者假。 它和LIKE
非常類似,只不過它使用 SQL 標准定義的正則表達式理解模式。
9.7.3. POSIX正則表達式
表 9.14列出了所有可用於 POSIX 正則表達式模式匹配的操作符。表 9.14. 正則表達式匹配操作符
操作符 | 描述 | 例子 |
---|---|---|
~ |
匹配正則表達式,大小寫敏感 | 'thomas' ~ '.*thomas.*' |
~* |
匹配正則表達式,大小寫不敏感 | 'thomas' ~* '.*Thomas.*' |
!~ |
不匹配正則表達式,大小寫敏感 | 'thomas' !~ '.*Thomas.*' |
!~* |
不匹配正則表達式,大小寫不敏感 | 'thomas' !~* '.*vadim.*' |
POSIX正則表達式提供了比LIKE
和SIMILAR TO
操作符更強大的含義。
9.21. 視窗函數
視窗函數提供在與當前查詢行相關的行集合上執行計算的能力。有關這個特性的介紹請見第 3.5 節。 語法細節則請見第 4.2.8 節。
表 9.57列出了內建的視窗函數。註意必須使用視窗函數的語法調用這些函數; 一個OVER
子句是必需的。
在這些函數之外,任何內建的或者用戶定義的通用或者統計性聚集(即非有序集和假想集聚集)都可以被用作一個視窗函數,內建聚集的列表請見第 9.20 節。僅當聚集函數調用後面跟著一個OVER
子句時,聚集函數才會像視窗函數那樣工作,否則它們會按非視窗聚集的方式運行並且為整個集合返回一個單一行。
表 9.57. 通用視窗函數
在表 9.57中列出的所有函數都依賴於相關視窗定義的ORDER BY
子句指定的排序順序。僅考慮ORDER BY
列時不能區分的行被稱為是同等行。定義的這四個排名函數(包括 cume_dist
),對於任何兩個同等行的答案相同。