

 Amazon Redshift は、パッチ 198 以降、新しい Python UDF の作成をサポートしなくなります。既存の Python UDF は、2026 年 6 月 30 日まで引き続き機能します。詳細については、[ブログ記事](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)を参照してください。

# SIMILAR TO
<a name="pattern-matching-conditions-similar-to"></a>

SIMILAR TO 演算子は、列名などの文字列式を、SQL の標準的な正規表現パターンと突き合わせます。SQL の正規表現パターンには、[LIKE](r_patternmatching_condition_like.md) 演算子によってサポートされる 2 つを含む、一連のパターンマッチングメタ文字を含めることができます。

SIMILAR TO 演算子の場合は、POSIX の正規表現の動作 (パターンは文字列の任意の部分と一致できる) とは異なり、パターンが文字全体と一致した場合にのみ true を返します。

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%';
```

## 構文
<a name="pattern-matching-conditions-similar-to-synopsis"></a>

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

## 引数
<a name="pattern-matching-conditions-similar-to-arguments"></a>

 *expression*   
列名など、有効な UTF-8 文字式。

SIMILAR TO  
SIMILAR TO は、*expression* 内の文字列全体について、大文字小文字を区別するパターンマッチングを実行します。

 * パターン*   
SQL の標準的な正規表現パターンを表現する有効な UTF-8 文字式。

 *escape\_char*   
パターン内でメタ文字をエスケープする文字式。デフォルトは 2 個のバックスラッシュ (「\\\\」) です。

*pattern* にメタ文字が含まれていない場合、pattern は文字列そのものを表現するにすぎません。

どちらの文字式も CHAR または VARCHAR のデータ型になることができます。文字式の型が異なる場合、Amazon Redshift は *pattern* のデータ型を *expression* のデータ型に変換します。

SIMILAR TO では、次のパターンマッチングメタ文字をサポートしています。


| 演算子  | 説明  | 
| --- | --- | 
| %  | ゼロ個以上の任意の文字シーケンスをマッチングします。 | 
| \_ | 任意の 1 文字をマッチングします。 | 
| \| | 交替を示します (2 つの選択肢のいずれか)。 | 
| \* | 前の項目をゼロ回以上繰り返します。 | 
| \+ | 前の項目を 1 回以上繰り返します。 | 
| ?  | 前の項目をゼロ回または 1 回繰り返します。 | 
| {m} | 前の項目をちょうど m 回だけ繰り返します。 | 
| {m,} | 前の項目を m 回またはそれ以上の回数繰り返します。 | 
| {m,n} | 前の項目を少なくとも m 回、多くても n 回繰り返します。 | 
|  () | グループ項目を括弧で囲んで、単一の論理項目にします。 | 
| [...] | 角括弧式は、POSIX 正規表現の場合のように、文字クラスを指定します。 | 

## 例
<a name="pattern-matching-conditions-similar-to-examples"></a>

次の表に、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
```