SIMILAR TO - AWS Clean Rooms

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

SIMILAR TO

SIMILAR TO 運算子會利用 SQL 標準規則表達式的模式,來比對字串表達式 (例如資料欄的名稱)。SQL 標準規則表達式的模式可包含一組模式比對中繼字元,其中包括 LIKE 運算子所支援的兩個字元。

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

SIMILAR TO 會進行區分大小寫的比對。

注意

使用 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 TO

SIMILAR TO 會針對 expression 中的整個字串,進行區分大小寫的模式比對。

pattern

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

escape_char

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

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

兩個字元表達式都可以是 CHAR 或 VARCHAR 資料類型。如果不同,AWS Clean Rooms 會將 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 my_table_def WHERE "column" SIMILAR TO '%start\\_%' ORDER BY tablename, "column" LIMIT 5; tablename | column --------------------------+--------------------- my_abort_idle | idle_start_time my_abort_idle | txn_start_time my_analyze_compression | start_time my_auto_worker_levels | start_level my_auto_worker_levels | start_wlm_occupancy

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

SELECT tablename, "column" FROM my_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