SIMILAR 至 - Amazon Redshift

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

SIMILAR 至

SIMILAR TO 運算子會比對字串表達式,例如資料欄名稱,並具有SQL標準規則表達式模式。SQL 規則表達式模式可以包含一組模式相符的元字元,包括LIKE運算子支援的兩個元。

只有在 TO SIMILAR運算子的模式符合整個字串時,TO 運算子才會傳回 true,與POSIX規則表達式行為不同,其中模式可以符合字串的任何部分。

SIMILAR 執行區分大小寫的比對。

注意

使用 SIMILAR TO 進行規則表達式比對的運算成本高昂。我們建議您LIKE盡可能使用 ,特別是在處理大量資料列時。例如,下列查詢的功能相同,但使用 的查詢LIKE執行速度比使用規則運算式的查詢快上數倍:

select count(*) from event where eventname SIMILAR TO '%(Ring|Die)%'; select count(*) from event where eventname LIKE '%Ring%' OR eventname LIKE '%Die%';

語法

expression [ NOT ] SIMILAR TO pattern [ ESCAPE 'escape_char' ]

引數

運算式

有效的 UTF-8 字元表達式,例如資料欄名稱。

SIMILAR 至

SIMILAR 對運算式 中的整個字串執行區分大小寫的模式比對。

pattern

有效的 UTF-8 字元表達式,代表SQL標準規則表達式模式。

escape_char

字元表達式,將會用來逸出模式中的中繼字元。預設值為兩個反斜線 (「\\」)。

如果模式未包含任何中繼字元,則模式只代表字串本身。

其中一個字元表達式可以是 CHAR或 VARCHAR 資料類型。如果不同,Amazon Redshift 會將 pattern 轉換為 expression 的資料類型。

SIMILAR TO 支援下列模式比對中繼字元:

運算子 描述
% 比對任何 0 的序列或更多字元。
_ 比對任一個單一字元。
| 表示交替 (兩種替代選項中的任一種)。
* 重複前一個項目 0 次或更多次。
+ 重複前一個項目 1 次或更多次。
? 重複前一個項目 0 次或 1 次。
{m} 重複前一個項目 m 次。
{m,} 重複前一個項目 m 次或更多次。
{m,n} 重複前一個項目至少 m 次,而且不超過 n 次。
() 括號可將多個項目分組為單一邏輯項目。
[...] 括號表達式會指定字元類別,就像在POSIX規則表達式中一樣。

範例

下表顯示使用 SIMILAR TO 比對模式的範例:

表達式 傳回值
'abc' SIMILAR TO 'abc' True
'abc' SIMILAR TO '_b_' True
'abc' SIMILAR TO '_A_' False
'abc' SIMILAR TO '%(b|d)%' True
'abc' SIMILAR TO '(b|c)%' False
'AbcAbcdefgefg12efgefg12' SIMILAR TO '((Ab)?c)+d((efg)+(12))+' True
'aaaaaab11111xy' SIMILAR TO 'a{6}_ [0-9]{5}(x|y){2}' True
'$0.87' SIMILAR TO '$[0-9]+(.[0-9][0-9])?' True

下列範例會找出名稱中包含「E」或「H」的城市:

SELECT DISTINCT city FROM users WHERE city SIMILAR TO '%E%|%H%' ORDER BY city LIMIT 5; city ----------------- Agoura Hills Auburn Hills Benton Harbor Beverly Hills Chicago Heights

下列的範例使用預設的逸出字串 (「\\」),來搜尋包含「_」的字串:

SELECT tablename, "column" FROM pg_table_def WHERE "column" SIMILAR TO '%start\\_%' ORDER BY tablename, "column" LIMIT 5; tablename | column --------------------------+--------------------- stcs_abort_idle | idle_start_time stcs_abort_idle | txn_start_time stcs_analyze_compression | start_time stcs_auto_worker_levels | start_level stcs_auto_worker_levels | start_wlm_occupancy

下列的範例將「^」指定為逸出字元,然後使用該逸出字元來搜尋包含「_」的字串:

SELECT tablename, "column" FROM pg_table_def WHERE "column" SIMILAR TO '%start^_%' ESCAPE '^' ORDER BY tablename, "column" LIMIT 5; tablename | column --------------------------+--------------------- stcs_abort_idle | idle_start_time stcs_abort_idle | txn_start_time stcs_analyze_compression | start_time stcs_auto_worker_levels | start_level stcs_auto_worker_levels | start_wlm_occupancy