文字列検索用関数
このセクションのすべての関数は、デフォルトでは大文字小文字を区別して検索します。大文字小文字を区別しない検索は、通常は別の関数バリアントとして提供されます。
大文字小文字を区別しない検索は、英語の小文字・大文字の規則に従います。例えば、英語では小文字の i の大文字は I ですが、トルコ語では İ となります。そのため、英語以外の言語では想定外の結果になる可能性があります。
このセクションの関数は、検索対象の文字列(このセクションでは haystack と呼びます)および検索文字列(このセクションでは needle と呼びます)がシングルバイトエンコードされたテキストであることを前提としています。この前提が
満たされていない場合でも、例外はスローされず、結果は未定義となります。UTF-8 エンコードされた文字列での検索は、通常は別の関数バリアントとして提供されます。同様に、UTF-8 用の関数バリアントを使用し、入力文字列が UTF-8 エンコードされたテキストでない場合も、例外はスローされず、
結果は未定義となります。なお、自動的な Unicode 正規化は行われませんが、そのためには
normalizeUTF8*() 関数を使用できます。
一般的な文字列関数 および 文字列置換用関数 は別途説明されています。
以下のドキュメントは、system.functions システムテーブルから生成されています。
countMatches
導入バージョン: v21.1
文字列内で正規表現にマッチする回数を返します。
この関数の動作は ClickHouse のバージョンに依存します:
- v25.6 より前のバージョンでは、パターンが空文字列にマッチし得る場合であっても、最初の空マッチが発生した時点でカウントを停止します。
- v25.6 以降のバージョンでは、空マッチが発生しても処理を継続します。従来の動作は、
count_matches_stop_at_empty_match = trueの設定を使用して復元できます。
構文
引数
返される値
見つかった一致の数を返します。UInt64
使用例
数字列をカウントする
countMatchesCaseInsensitive
導入バージョン: v21.1
countMatches と同様ですが、大文字と小文字を区別せずにマッチングを行います。
構文
引数
haystack— 検索対象の文字列。Stringpattern— 正規表現パターン。const String
返り値
見つかった一致件数を返します。UInt64
使用例
大文字小文字を区別しないカウント
countSubstrings
導入バージョン: v21.1
部分文字列 needle が文字列 haystack の中に何回出現するかの回数を返します。
構文
引数
haystack— 検索を行う対象の文字列。String または Enum。 -needle— 検索する部分文字列。String。 -start_pos— 検索を開始するhaystack内の位置(1 始まり)。UInt。省略可能。
戻り値
出現回数。UInt64
例
使用例
start_pos 引数を指定する場合
countSubstringsCaseInsensitive
導入バージョン: v21.1
countSubstrings と同様ですが、大文字・小文字を区別せずにカウントします。
構文
引数
haystack— 検索対象となる文字列。StringまたはEnumneedle— 検索する部分文字列。Stringstart_pos— 省略可能。検索を開始するhaystack内の位置(1 始まり)。UInt*
戻り値
haystack 内での needle の出現回数を返します。UInt64
例
使用例
start_pos 引数あり
countSubstringsCaseInsensitiveUTF8
導入バージョン: v21.1
countSubstrings と同様ですが、大文字小文字を区別せずにカウントし、haystack が UTF-8 文字列であることを前提とします。
構文
引数
haystack— 検索対象となる UTF-8 文字列。StringまたはEnumneedle— 検索する部分文字列。Stringstart_pos— 省略可能。検索を開始するhaystack内の位置(1始まり)。UInt*
戻り値
haystack 内に出現する needle の回数を返します。UInt64
例
使用例
start_pos 引数を指定する場合
extract
導入バージョン: v1.1
文字列から正規表現に一致する最初の部分文字列を抽出します。 'haystack' が 'pattern' にマッチしない場合は、空文字列を返します。
この関数は RE2 正規表現ライブラリを使用します。サポートされている構文については re2 を参照してください。
正規表現にキャプチャグループ(サブパターン)が含まれている場合、関数は入力文字列に対して最初のキャプチャグループを照合します。
構文
引数
haystack— 抽出元となる文字列。Stringpattern— 通常はキャプチャグループを含む正規表現。const String
返り値
抽出された部分文字列を文字列として返します。String
例
メールアドレスからドメインを抽出
一致がない場合、空文字列を返す
extractAll
導入バージョン: v1.1
extract と同様ですが、文字列内で正規表現にマッチしたすべての一致を配列として返します。
'haystack' が 'pattern' の正規表現にマッチしない場合は、空配列が返されます。
正規表現にキャプチャグループ(サブパターン)が含まれている場合、この関数は入力文字列を最初のキャプチャグループに対して照合します。
構文
引数
haystack— 部分文字列を抽出する対象の文字列。Stringpattern— 任意でキャプチャグループを含む正規表現。const String
戻り値
抽出された部分文字列の配列を返します。Array(String)
使用例
すべての数値を抽出する
キャプチャグループを使用して抽出
extractAllGroupsHorizontal
導入: v20.5
指定された正規表現を使用して文字列内のすべてのグループに一致させ、配列の配列を返します。各配列には、同一のキャプチャグループに属するすべてのキャプチャがグループ番号ごとに整理されて格納されます。
構文
引数
s— 抽出対象の入力文字列。StringまたはFixedStringregexp— マッチングに使用する正規表現。const Stringまたはconst FixedString
返される値
配列の配列を返します。各内側の配列には、すべてのマッチに対して、同一のキャプチャグループから取得されたすべてのキャプチャが含まれます。最初の内側の配列にはグループ 1 からのすべてのキャプチャ、2 番目の配列にはグループ 2 からのすべてのキャプチャ、という形式になります。マッチが見つからない場合は空の配列を返します。Array(Array(String))
例
使用例
extractGroups
導入バージョン: v20.5
正規表現にマッチした、重なりのない部分文字列に含まれるすべてのグループを抽出します。
構文
引数
s— 抽出対象の入力文字列。StringまたはFixedStringregexp— 正規表現の定数。const Stringまたはconst FixedString
戻り値
関数が少なくとも 1 つのマッチするグループを見つけた場合、group_id(1 から N。ここで N は regexp 内のキャプチャグループの数)ごとにまとめられた Array(Array(String)) カラムを返します。一致するグループがない場合は、空の配列を返します。Array(Array(String))
例
使用例
hasAllTokens
導入バージョン: v25.10
hasAnyTokens と同様に動作しますが、needle 文字列または配列内のすべてのトークンが input 文字列にマッチする場合に 1 を返し、それ以外の場合は 0 を返します。input がカラムの場合、この条件を満たすすべての行を返します。
最適なパフォーマンスのためには、カラム input に テキスト索引 が定義されている必要があります。
テキスト索引が定義されていない場合、この関数は総当たりのカラム走査を実行し、これは索引検索よりも桁違いに遅くなります。
検索の前に、この関数は次をトークン化します:
input引数(常に)、およびneedle引数(String として与えられた場合) に対して、テキスト索引に指定されたトークナイザを使用します。 カラムにテキスト索引が定義されていない場合は、代わりにsplitByNonAlphaトークナイザが使用されます。needle引数が Array(String) 型の場合、各配列要素は 1 つのトークンとして扱われ、追加のトークン化は行われません。
重複するトークンは無視されます。 例えば、needles = ['ClickHouse', 'ClickHouse'] は ['ClickHouse'] と同様に扱われます。
構文
エイリアス: hasAllToken
引数
input— 入力カラム。StringまたはFixedStringまたはArray(String)またはArray(FixedString)needles— 検索するトークン。StringまたはArray(String)
戻り値
指定したすべてのトークンが一致する場合は 1、それ以外の場合は 0 を返します。UInt8
例
文字列カラムに対する使用例
配列内で、トークナイズせず AS-IS のまま検索する文字列(needle)を指定する
tokens 関数を使ってニードルを生成する
配列カラムとマップカラムの使用例
配列カラムの例
mapKeys の例
mapValues を使った例
hasAnyTokens
導入バージョン: v25.10
needle 文字列または配列内のトークンのうち少なくとも 1 つが input 文字列にマッチする場合は 1 を返し、それ以外の場合は 0 を返します。input がカラムの場合、この条件を満たすすべての行を返します。
最適なパフォーマンスのため、カラム input には text index が定義されている必要があります。
text index が定義されていない場合、この関数はブルートフォースによるカラムスキャンを実行し、INDEX ルックアップと比べて桁違いに遅くなります。
検索を行う前に、この関数は次をトークン化します。
-
input引数(常に) -
needle引数(String として指定された場合)これらには、text index に対して指定された tokenizer が使用されます。 カラムに text index が定義されていない場合は、代わりに
splitByNonAlphatokenizer が使用されます。needle引数が Array(String) 型の場合、各配列要素はそれ自体がトークンとして扱われ、追加のトークン化は行われません。
重複するトークンは無視されます。 たとえば、['ClickHouse', 'ClickHouse'] は ['ClickHouse'] と同じように扱われます。
構文
別名: hasAnyToken
引数
input— 入力カラム。StringまたはFixedStringまたはArray(String)またはArray(FixedString)needles— 検索するトークン。StringまたはArray(String)
戻り値
少なくとも 1 つ一致がある場合は 1 を返し、それ以外の場合は 0 を返します。UInt8
例
文字列カラムに対する使用例
トークナイズせずに文字列をそのまま検索するための検索対象文字列を配列で指定します
tokens 関数で needle を生成する
配列およびマップ型カラムの使用例
配列カラムの例
mapKeys の使用例
mapValues の例
hasSubsequence
導入バージョン: v23.7
needle が haystack の部分列かどうかを判定します。
文字列の部分列とは、ある文字列から 0 個以上の文字を削除し、残りの文字の順序を変えずに得られる文字列の並びのことです。
構文
引数
返り値
needle が haystack の部分文字列であれば 1 を、そうでなければ 0 を返します。UInt8
例
基本的な部分文字列チェック
部分文字列が見つかりません
hasSubsequenceCaseInsensitive
導入バージョン: v23.7
hasSubsequence と同様に動作しますが、検索時に大文字と小文字を区別しません。
構文
引数
戻り値
needle が haystack の部分列である場合は 1 を、そうでない場合は 0 を返します。UInt8
例
使用例
hasSubsequenceCaseInsensitiveUTF8
導入バージョン: v23.7
hasSubsequenceUTF8 と同様ですが、大文字・小文字を区別せずに検索します。
構文
引数
返される値
needle が haystack の部分シーケンスである場合は 1、それ以外の場合は 0 を返します。UInt8
例
使用例
hasSubsequenceUTF8
導入バージョン: v23.7
hasSubsequence と同様ですが、haystack と needle が UTF-8 エンコードされた文字列であることを前提とします。
構文
引数
戻り値
needle が haystack の部分列であれば 1 を返し、それ以外の場合は 0 を返します。 UInt8
例
使用例
一致しない部分列
hasToken
導入バージョン: v20.1
指定したトークンが検索対象文字列(haystack)に含まれているかどうかを確認します。
トークナイザとして splitByNonAlpha を使用します。つまり、トークンは [0-9A-Za-z_](数字、ASCII 文字、およびアンダースコア)からなる連続した文字列のうち、可能な限り長い部分列として定義されます。
構文
引数
haystack— 検索対象の文字列。Stringtoken— 検索するトークン。const String
戻り値
トークンが見つかった場合は 1 を返し、見つからなかった場合は 0 を返します。UInt8
使用例
トークン検索
hasTokenCaseInsensitive
導入バージョン: v
tokenbf_v1 索引を使用して、haystack 内の needle を大文字小文字を区別せずに検索します。
構文
引数
- なし
戻り値
例
hasTokenCaseInsensitiveOrNull
導入バージョン: v
tokenbf_v1 索引を使用して、haystack 内で needle を大文字小文字を区別せずに検索します。needle が不正な形式の場合は null を返します。
構文
引数
- なし。
戻り値
例
hasTokenOrNull
導入バージョン: v20.1
hasToken と同様ですが、トークンが不正形式の場合は null を返します。
構文
引数
haystack— 検索対象の文字列。定数でなければなりません。Stringtoken— 検索するトークン。const String
返される値
トークンが見つかった場合は 1、見つからない場合は 0 を返します。トークンが不正な形式の場合は null を返します。Nullable(UInt8)
例
使用例
ilike
導入されたバージョン: v20.6
like と同様ですが、大文字と小文字を区別せずに検索します。
構文
引数
haystack— 検索を行う文字列。StringまたはFixedStringpattern— 照合対象の LIKE パターン。String
戻り値
文字列が LIKE パターンに一致した場合は 1(大文字小文字を区別せずに比較)、それ以外の場合は 0 を返します。UInt8
例
使用例
like
導入バージョン: v1.1
文字列 haystack が LIKE 式 pattern にマッチするかどうかを返します。
LIKE 式には通常の文字に加えて、次のメタ文字を含めることができます。
%は任意の数の任意の文字(0 文字も可)を表します。_は 1 文字の任意の文字を表します。\はリテラルの%、_、\をエスケープするために使用します。
マッチングは UTF-8 に基づいて行われます。たとえば、_ は UTF-8 では 2 バイトで表現される Unicode コードポイント ¥ にマッチします。
haystack または LIKE 式が有効な UTF-8 でない場合、その動作は未定義です。
Unicode の正規化は自動では行われません。必要に応じて normalizeUTF8* 関数を使用してください。
リテラルの %、_ および \(これらは LIKE のメタ文字です)とマッチさせるには、先頭にバックスラッシュを付けて \%、\_、\\ と記述します。
バックスラッシュが %、_、\ 以外の文字の前に付く場合、その特別な意味は失われ(すなわちリテラルとして解釈され)ます。
ClickHouse では、文字列内のバックスラッシュもクオートする必要があるため、実際には \\%、\\_、\\\\ と記述する必要があります。
%needle% という形式の LIKE 式の場合、この関数は position 関数と同等の速度で動作します。
それ以外の LIKE 式は内部的に正規表現へ変換され、関数 match と同程度のパフォーマンスで実行されます。
構文
引数
haystack— 検索対象の文字列。StringまたはFixedStringpattern— 照合に使用するLIKEパターン。%(任意の長さの文字列にマッチ)、_(任意の1文字にマッチ)、およびエスケープ用の\を含めることができます。String
戻り値
文字列が LIKE パターンにマッチした場合は 1、それ以外の場合は 0 を返します。UInt8
例
使用例
1文字ワイルドカード
マッチしないパターン
locate
導入バージョン: v18.16
position と同様ですが、引数 haystack と needle の順序が逆になっています。
この関数の動作は ClickHouse のバージョンによって異なります:
- v24.3 未満のバージョンでは、
locateは関数positionのエイリアスであり、引数(haystack, needle[, start_pos])を受け取っていました。 - v24.3 以上のバージョンでは、
locateは個別の関数(MySQL との互換性向上のため)となり、引数(needle, haystack[, start_pos])を受け取ります。 以前の動作は、設定function_locate_has_mysql_compatible_argument_order = falseを使用することで復元できます。
構文
引数
needle— 検索対象となる部分文字列。Stringhaystack— 検索を実行する文字列。StringまたはEnumstart_pos— 省略可能。検索を開始するhaystack内の位置 (1 始まり)。UInt
戻り値
部分文字列が見つかった場合は、1 から数えるバイト単位での開始位置を返し、見つからなかった場合は 0 を返す。UInt64
例
基本的な使用方法
match
導入バージョン: v1.1
指定された文字列が、指定された正規表現パターンにマッチするかを判定します。
この関数は RE2 正規表現ライブラリを使用します。サポートされている構文については re2 を参照してください。
マッチングは UTF-8 を前提として動作します。例えば ¥ は内部的には 2 バイトを使用しますが、マッチング時には 1 つのコードポイントとして扱われます。
正規表現には NULL バイトを含めることはできません。
haystack または pattern が不正な UTF-8 の場合、その挙動は未定義です。
re2 のデフォルト動作と異なり、. は改行にもマッチします。これを無効にするには、パターンの先頭に (?-s) を付けてください。
パターンは両端で自動的にアンカーされます(パターンが先頭に ^ を、末尾に $ を付けたかのように扱われます)。
部分文字列を検索したいだけであれば、代わりに like や position 関数を使用できます。これらはこの関数よりもはるかに高速に動作します。
代替の演算子構文: haystack REGEXP pattern。
構文
別名: REGEXP_MATCHES
引数
haystack— パターンを検索する対象の文字列。Stringpattern— 正規表現パターン。const String
返される値
パターンが一致する場合は 1、それ以外の場合は 0 を返します。UInt8
例
基本的なパターンマッチ
パターンが一致しない場合
multiFuzzyMatchAllIndices
導入バージョン: v20.1
multiFuzzyMatchAny と同様ですが、一定の 編集距離 以内で haystack にマッチするすべてのインデックスを、任意の順序の配列として返します。
構文
引数
haystack— 検索対象となる文字列。Stringdistance— あいまい一致における最大編集距離。UInt8pattern— 照合対象となるパターンの配列。Array(String)
返される値
haystack に対して、指定した編集距離以内でマッチするすべてのインデックス(1 から始まる)を、順不同で要素とする配列を返します。マッチが見つからない場合は空配列を返します。Array(UInt64)
例
使用例
multiFuzzyMatchAny
導入バージョン: v20.1
multiMatchAny と同様ですが、一定の 編集距離 以内でパターンのいずれかが haystack にマッチした場合に 1 を返します。
この関数は hyperscan ライブラリの実験的機能に依存しており、特定のエッジケースでは低速になる可能性があります。
パフォーマンスは編集距離の値と使用するパターンに依存しますが、常に非ファジー版と比べて計算コストが高くなります。
multiFuzzyMatch*() 関数ファミリーは、hyperscan の制約により UTF-8 正規表現をサポートしていません(バイト列として扱われます)。
構文
引数
haystack— 検索対象となる文字列。Stringdistance— ファジーマッチングにおける最大編集距離。UInt8pattern— 省略可能。一致判定に使用するパターンの配列。Array(String)
返り値
指定した編集距離以内で、いずれかのパターンが haystack に一致した場合は 1、それ以外の場合は 0 を返します。UInt8
例
使用例
multiFuzzyMatchAnyIndex
導入バージョン: v20.1
multiFuzzyMatchAny と同様ですが、検索対象文字列に対して、定数の編集距離以内で一致する任意のインデックスを返します。
構文
引数
haystack— 検索対象の文字列。Stringdistance— ファジーマッチングにおける最大編集距離。UInt8pattern— 照合対象となるパターンの配列。Array(String)
戻り値
指定された編集距離の範囲内で haystack に一致する任意のパターンのインデックス(1 から始まる)を返し、一致するパターンがない場合は 0 を返します。UInt64
例
使用例
multiMatchAllIndices
導入バージョン: v20.1
multiMatchAny と似ていますが、haystack にマッチするすべてのインデックスを要素とする配列を、任意の順序で返します。
構文
引数
戻り値
haystack 内で一致したすべてのインデックス(1 起算)を、順不同で含む配列。一致が見つからない場合は空配列を返します。Array(UInt64)
例
使用例
multiMatchAny
導入バージョン: v20.1
複数の正規表現パターンのうち、少なくとも 1 つが haystack(検索対象の文字列)にマッチするかどうかを判定します。
文字列内で複数の部分文字列を検索したいだけの場合は、代わりに関数 multiSearchAny を使用してください。この関数よりもはるかに高速に動作します。
構文
引数
haystack— パターンを検索する対象の文字列。Stringpattern1[, pattern2, ...]— 1 つ以上の正規表現パターンからなる配列。Array(String)
返り値
いずれかのパターンにマッチした場合は 1、それ以外は 0 を返します。UInt8
使用例
複数パターンでのマッチング
どのパターンにも一致しません
multiMatchAnyIndex
導入バージョン: v20.1
multiMatchAny と同様ですが、haystack にマッチする任意の索引を返します。
構文
引数
haystack— 検索を実行する対象の文字列。Stringpattern— 照合に使用する正規表現。Array(String)
戻り値
最初にマッチしたパターンの位置(1 から始まる)を返します。マッチが見つからない場合は 0 を返します。UInt64
例
使用例
multiSearchAllPositions
導入バージョン: v20.1
position と似ていますが、haystack 文字列内の複数の needle となる部分文字列について、位置(バイト単位、1 起算)の配列を返します。
すべての multiSearch*() 関数は、needle を最大 2^8 個までしかサポートしません。
構文
引数
haystack— 検索を実行する対象の文字列。Stringneedle1[, needle2, ...]— 検索対象となる 1 つ以上の部分文字列の配列。Array(String)
戻り値
部分文字列が見つかった場合は、バイト単位かつ 1 起算の開始位置を、見つからなかった場合は 0 を要素とする配列を返します。Array(UInt64)
使用例
複数 needle の検索
multiSearchAllPositionsCaseInsensitive
導入バージョン: v20.1
multiSearchAllPositions と同様ですが、大文字と小文字を区別しません。
構文
引数
haystack— 検索を実行する対象の文字列。Stringneedle1[, needle2, ...]— 検索対象となる 1 つ以上の部分文字列の配列。Array(String)
返される値
各部分文字列に対して、見つかった場合はバイト単位かつ 1 始まりの開始位置、見つからなかった場合は 0 を要素とする配列を返します。Array(UInt64)
例
大文字小文字を区別しない複数検索
multiSearchAllPositionsCaseInsensitiveUTF8
導入バージョン: v20.1
multiSearchAllPositionsUTF8 と同様ですが、大文字と小文字を区別しません。
構文
引数
haystack— 検索を行う UTF-8 エンコード文字列。Stringneedle— 検索する UTF-8 エンコード部分文字列の配列。Array(String)
戻り値
部分文字列が見つかった場合の、1 から数えたバイト単位での開始位置の配列。部分文字列が見つからなかった場合は 0 を返します。Array
例
大文字・小文字を区別しない UTF-8 検索
multiSearchAllPositionsUTF8
導入バージョン: v20.1
multiSearchAllPositions と同様ですが、haystack および needle の部分文字列が UTF-8 でエンコードされた文字列であることを前提とします。
構文
引数
haystack— 検索を行う UTF-8 エンコード済み文字列。Stringneedle1[, needle2, ...]— 検索対象となる UTF-8 エンコード済み部分文字列の配列。Array(String)
返される値
部分文字列が見つかった場合、その開始位置(バイト単位、1 起算)の配列を返し、見つからなかった場合は 0 を返します。Array
例
UTF-8 マルチ検索
multiSearchAny
導入バージョン: v20.1
指定された複数の needle 文字列のうち少なくとも 1 つが、haystack 文字列にマッチするかどうかを判定します。
関数 multiSearchAnyCaseInsensitive、multiSearchAnyUTF8、multiSearchAnyCaseInsensitiveUTF8 は、この関数の大文字小文字を区別しないおよび/または UTF-8 対応のバリアントを提供します。
構文
引数
haystack— 検索を実行する文字列。Stringneedle1[, needle2, ...]— 検索対象となる部分文字列の配列。Array(String)
戻り値
少なくとも 1 件一致があれば 1 を返し、一致が 1 件もなければ 0 を返します。UInt8
例
いずれかへの一致検索
multiSearchAnyCaseInsensitive
導入バージョン: v20.1
multiSearchAny と同様ですが、大文字・小文字を区別しません。
構文
引数
haystack— 検索を実行する対象の文字列。Stringneedle— 検索対象の部分文字列。Array(String)
戻り値
大文字小文字を区別しない一致が少なくとも 1 つあれば 1、1 つもなければ 0 を返します。UInt8
使用例
大文字小文字を区別しない検索
multiSearchAnyCaseInsensitiveUTF8
導入されたバージョン: v20.1
multiSearchAnyUTF8 と同様ですが、大文字と小文字を区別しません。
構文
引数
haystack— 検索対象の UTF-8 文字列。Stringneedle— 検索する UTF-8 部分文字列の配列。Array(String)
戻り値
大文字小文字を区別しない一致が少なくとも 1 つあれば 1 を返し、1 つもなければ 0 を返します。UInt8
使用例
UTF-8 文字列 'Здравствуйте' が与えられたときに、小文字の文字 'з' が含まれているかを確認する
multiSearchAnyUTF8
導入バージョン: v20.1
multiSearchAny と同様ですが、haystack 文字列および needle 部分文字列が UTF-8 エンコードされた文字列であると仮定します。
構文
引数
haystack— 検索対象の UTF-8 文字列。Stringneedle— 検索する UTF-8 文字列の部分文字列。Array(String)
返される値
少なくとも 1 件一致があれば 1 を返し、一致が 1 件もなければ 0 を返します。UInt8
例
UTF-8 文字列 '你好,世界'('Hello, world')が与えられたとき、その文字列内に 你 または 界 の文字が含まれているかを確認します。
multiSearchFirstIndex
導入バージョン: v20.1
複数の needle 文字列を haystack 文字列内で検索し(大文字と小文字は区別)、最初に見つかった needle のインデックス(1 から数えた位置)を返します。
構文
引数
haystack— 検索対象の文字列。Stringneedles— 検索する文字列の配列。Array(String)
戻り値
haystack 内で最初に見つかった needle の、1 始まりのインデックス(needles 配列内での位置)を返します。needle が 1 つも見つからない場合は 0 を返します。検索は大文字と小文字を区別します。UInt64
例
使用例
大文字小文字を区別する場合の挙動
一致が見つかりません
multiSearchFirstIndexCaseInsensitive
導入バージョン: v20.1
文字列 haystack 内で最も左側に見つかった needle_i のインデックス i(1 から始まる)を返し、見つからない場合は 0 を返します。
大文字小文字を区別せずに検索します。
構文
引数
haystack— 検索対象の文字列。Stringneedle— 検索する部分文字列。Array(String)
戻り値
最も左側で見つかった needle のインデックス(1 から始まる)を返します。一致がない場合は 0 を返します。UInt8
例
使用例
multiSearchFirstIndexCaseInsensitiveUTF8
導入バージョン: v20.1
UTF-8 エンコーディングをサポートしつつ、大文字小文字を区別せずに、haystack 文字列内で複数の needle 文字列を検索し、最初に見つかった needle の 1 始まりのインデックスを返します。
構文
引数
haystack— 検索対象の文字列。Stringneedles— 検索する文字列の配列。Array(String)
返される値
haystack 内で最初に見つかった要素の、1 から始まるインデックス(needles 配列内の位置)を返します。どれも見つからなかった場合は 0 を返します。検索は大文字と小文字を区別せず、UTF-8 文字エンコーディングに対応しています。UInt64
例
使用例
UTF-8 における大文字・小文字の扱い
一致するものが見つかりません
multiSearchFirstIndexUTF8
導入バージョン: v20.1
文字列 haystack の中で、最も左側で最初に見つかった needle_i に対応するインデックス i(1 から始まる)を返し、該当するものがない場合は 0 を返します。
haystack および needle は UTF-8 でエンコードされた文字列であると仮定します。
構文
引数
haystack— 検索を行う UTF-8 文字列。Stringneedle— 検索対象となる UTF-8 部分文字列の配列。Array(String)
戻り値
最も左側で見つかった needle のインデックス(1 から始まる)を返します。一致がない場合は 0 を返します。UInt8
例
使用例
multiSearchFirstPosition
導入バージョン: v20.1
position と同様ですが、複数の needle 文字列のいずれかと一致する haystack 文字列内の最も左端のオフセットを返します。
multiSearchFirstPositionCaseInsensitive、multiSearchFirstPositionUTF8、multiSearchFirstPositionCaseInsensitiveUTF8 は、この関数の大文字小文字を区別しない、または UTF-8 対応のバリアントを提供します。
構文
引数
haystack— 検索対象の文字列。Stringneedle1[, needle2, ...]— 検索する 1 つ以上の部分文字列からなる配列。Array(String)
返される値
haystack 文字列中で、複数の needle 文字列のいずれかに一致する最も左側のオフセットを返します。一致がなかった場合は 0 を返します。UInt64
例
先頭位置の検索
multiSearchFirstPositionCaseInsensitive
導入バージョン: v20.1
multiSearchFirstPosition と同様ですが、大文字・小文字を区別しません。
構文
引数
haystack— 検索を行う対象の文字列。Stringneedle— 検索する部分文字列の配列。Array(String)
戻り値
複数の needle 文字列のいずれかに一致する、haystack 文字列内の最も左側のオフセットを返します。一致がない場合は 0 を返します。UInt64
例
大文字小文字を区別しない最初の位置
multiSearchFirstPositionCaseInsensitiveUTF8
導入バージョン: v20.1
multiSearchFirstPosition と同様ですが、haystack と needle を UTF-8 文字列として扱い、大文字小文字を区別しません。
構文
引数
haystack— 検索を実行する UTF-8 文字列。Stringneedle— 検索対象となる UTF-8 部分文字列の配列。Array(String)
戻り値
複数の needle 文字列のいずれかと大文字小文字を区別せずに一致する、haystack 文字列内の最も左側のオフセットを返します。一致がない場合は 0 を返します。UInt64
例
与えられた needle のいずれかに一致する、UTF-8 文字列 'Здравствуй, мир'('Hello, world')内の最も左側のオフセットを検索する
multiSearchFirstPositionUTF8
導入バージョン: v20.1
multiSearchFirstPosition と同様ですが、haystack と needle が UTF-8 文字列であると仮定します。
構文
引数
haystack— 検索を実行する UTF-8 文字列。Stringneedle— 検索する UTF-8 部分文字列の配列。Array(String)
戻り値
複数の needle 文字列のいずれかに一致する haystack 文字列内の最も左側のオフセット。一致がない場合は 0 を返す。UInt64
使用例
UTF-8 文字列 'Здравствуй, мир'('Hello, world')に対して、指定された needle のいずれかに一致する最も左側のオフセットを求めます
ngramDistance
導入バージョン: v20.1
2 つの文字列間の 4-gram 距離を計算します。 そのために、2 つの 4-gram の多重集合間の対称差を数え、その値をそれぞれの要素数の合計で正規化します。 返される値が小さいほど、文字列同士はより類似しています。
大文字と小文字を区別しない検索や UTF-8 形式での使用には、関数 ngramDistanceCaseInsensitive、ngramDistanceUTF8、ngramDistanceCaseInsensitiveUTF8 を使用してください。
構文
引数
戻り値
0 から 1 の範囲の Float32 値を返します。返される値が小さいほど、文字列同士がより類似していることを示します。Float32
例
4-gram 距離を計算する
ngramDistanceCaseInsensitive
導入バージョン: v20.1
ngramDistance の大文字小文字を区別しないバリアントです。
大文字小文字を無視して、2つの文字列間の 4-gram 距離を計算します。
返される値が小さいほど、文字列同士はより類似しています。
構文
引数
返り値
0 から 1 の間の Float32 型の数値を返します。Float32
例
大文字小文字を区別しない 4-gram の距離
ngramDistanceCaseInsensitiveUTF8
導入バージョン: v20.1
ngramDistance の大文字小文字を区別しない UTF-8 版を提供します。
needle と haystack の文字列が UTF-8 エンコードされた文字列であることを前提とし、大文字小文字を無視します。
2 つの UTF-8 文字列間の 3-gram 距離を、大文字小文字を無視して計算します。
返される値が小さいほど、2 つの文字列はより類似しています。
構文
引数
戻り値
0 から 1 の間の Float32 型の数値を返します。Float32
使用例
大文字小文字を区別しない UTF-8 3-gram 距離
ngramDistanceUTF8
導入バージョン: v20.1
ngramDistance の UTF-8 版を提供します。
needle と haystack の文字列が UTF-8 でエンコードされていると仮定します。
2 つの UTF-8 文字列間の 3-gram 距離を計算します。
返される値が小さいほど、文字列同士の類似度は高くなります。
構文
引数
返り値
0 から 1 の間の Float32 型の値を返します。Float32
例
UTF-8 3-gram 距離
ngramSearch
導入バージョン: v20.1
2 つの文字列間の 4-gram 距離が指定された閾値以下かどうかをチェックします。
大文字小文字を区別しない検索や UTF-8 形式での検索を行う場合は、ngramSearchCaseInsensitive、ngramSearchUTF8、ngramSearchCaseInsensitiveUTF8 関数を使用します。
構文
引数
戻り値
2つの文字列間の 4-gram 距離がしきい値(デフォルトは 1.0)以下であれば 1、それ以外の場合は 0 を返します。UInt8
使用例
4-gram を使った検索
ngramSearchCaseInsensitive
導入バージョン: v20.1
ngramSearch の大文字小文字を区別しないバリアントを提供します。
needle 文字列と haystack 文字列の非対称な差分を計算します。具体的には、needle の n-gram 数から共通する n-gram の数を引いたものを、needle の n-gram 数で正規化した値です。
大文字小文字を無視して、2 つの文字列間の 4-gram の距離が指定されたしきい値以下かどうかをチェックします。
構文
引数
返り値
2 つの文字列間の 4-gram 距離がしきい値(デフォルトでは 1.0)以下であれば 1、それ以外の場合は 0 を返します(UInt8)。
例
4-gram を用いた大文字小文字を区別しない検索
ngramSearchCaseInsensitiveUTF8
導入バージョン: v20.1
ngramSearch の大文字小文字を区別しない UTF-8 版を提供します。
haystack と needle が UTF-8 文字列であることを前提とし、大文字小文字を無視します。
大文字小文字を無視して、2 つの UTF-8 文字列間の 3-gram 距離が指定されたしきい値以下かどうかを判定します。
構文
引数
戻り値
文字列間の 3-gram 距離が閾値(デフォルトは 1.0)以下の場合は 1 を、それ以外の場合は 0 を返します。UInt8
例
3-gram を使用した UTF-8 の大文字小文字を区別しない検索
ngramSearchUTF8
導入バージョン: v20.1
ngramSearch の UTF-8 版を提供します。
haystack と needle が UTF-8 エンコードされた文字列であると仮定します。
2 つの UTF-8 文字列間の 3-gram 距離が、指定されたしきい値以下であるかどうかを判定します。
構文
引数
戻り値
文字列間の 3-gram 距離がしきい値(デフォルトは 1.0)以下の場合は 1、それ以外の場合は 0 を返します。UInt8
使用例
3-gram を使用した UTF-8 検索
notILike
導入バージョン: v20.6
文字列がパターンに一致しないかどうかを、大文字小文字を区別せずにチェックします。パターンには、SQL の LIKE 照合用の特殊文字 % と _ を含めることができます。
構文
引数
haystack— 検索対象の入力文字列。StringまたはFixedStringpattern— 照合に使用する SQL の LIKE パターン。%は任意の文字列(長さ 0 を含む)に一致し、_はちょうど 1 文字に一致する。String
戻り値
文字列がパターンと一致しない場合は 1 を返し(一致判定は大文字小文字を区別しない)、それ以外の場合は 0 を返す。UInt8
使用例
使用方法の例
notLike
導入: v1.1
like と同様ですが、結果を否定します。
構文
引数
haystack— 検索を実行する対象の文字列。StringまたはFixedStringpattern— 照合に使用する LIKE パターン文字列。String
戻り値
文字列が LIKE パターンに一致しない場合は 1、それ以外は 0 を返します。UInt8
例
使用例
マッチしないパターン
position
導入バージョン: v1.1
文字列 haystack の中で、部分文字列 needle が現れる位置(バイト単位、1 始まり)を返します。
部分文字列 needle が空文字の場合、次のルールが適用されます:
start_posが指定されていない場合:1を返すstart_pos = 0の場合:1を返すstart_pos >= 1かつstart_pos <= length(haystack) + 1の場合:start_posを返す- それ以外の場合:
0を返す
同じルールは、関数 locate、positionCaseInsensitive、positionUTF8、positionCaseInsensitiveUTF8 にも適用されます。
構文
引数
haystack— 検索を実行する文字列。StringまたはEnumneedle— 検索対象の部分文字列。Stringstart_pos— 検索を開始するhaystack内の位置 (1 始まり)。省略可能。UInt
戻り値
部分文字列が見つかった場合、その開始位置をバイト単位で 1 から数えた値として返し、見つからなかった場合は 0 を返します。UInt64
例
基本的な使用例
start_pos 引数ありの場合
needle IN haystack 構文
空の検索文字列
positionCaseInsensitive
導入バージョン: v1.1
position と同様で、比較時に大文字と小文字を区別しません。
構文
別名: instr
引数
haystack— 検索を行う文字列。StringまたはEnumneedle— 検索対象の部分文字列。Stringstart_pos— 省略可。検索を開始するhaystack内の位置 (1 を起点とする)。UInt*
戻り値
部分文字列が見つかった場合は、1 を起点とするバイト単位の開始位置を返し、見つからなかった場合は 0 を返します。UInt64
例
大文字と小文字を区別しない検索
positionCaseInsensitiveUTF8
導入バージョン: v1.1
positionUTF8 と同様ですが、大文字小文字を区別せずに検索します。
構文
引数
haystack— 検索対象となる文字列。StringまたはEnumneedle— 検索する部分文字列。Stringstart_pos— 省略可能。検索を開始するhaystack内の位置 (1 起算)。UInt*
返される値
部分文字列が見つかった場合は、1 起算のバイトオフセットを返し、見つからなかった場合は 0 を返します。UInt64
例
大文字・小文字を区別しない UTF-8 検索
positionUTF8
導入: v1.1
position と同様ですが、haystack および needle が UTF-8 でエンコードされた文字列であることを前提とします。
構文
引数
haystack— 検索を行う文字列。StringまたはEnumneedle— 検索対象の部分文字列。Stringstart_pos— 省略可能。検索を開始するhaystack内の位置(1 始まり)。UInt*
戻り値
部分文字列が見つかった場合は、1 から数えたバイト単位の開始位置を返し、見つからなかった場合は 0 を返します。UInt64
例
UTF-8 文字数のカウント