isearch 関数

適用対象:はい Databricks Runtime 19.0 以降とマークされているチェック

Important

この機能は ベータ版です。 ワークスペース管理者は、[ プレビュー] ページからこの機能へのアクセスを制御できます。 Manage Azure Databricks プレビューを参照してください。

指定されたターゲット表現内のテキストを小文字に区別しない検索を実行します。

isearch は、同じ動作を持つ search 関数 の大文字と小文字を区別しないバリアントです。

Syntax

isearch ( expr [, ...], search_pattern [, mode => mode] )

引数

  • expr内側を探る表情。
  • search_pattern: は検索すべきテキストを示す定数の STRING 式です。
  • mode: オプション。 大文字に区別されない STRING マッチングの実行方法を制御するものです。 有効値は 'substring' または 'word' です。 既定値は 'substring' です。

返品

BOOLEAN値で、検索パターンが任意の文字列検索可能なターゲット表現に一致するかどうかを示します。これはケースを無視します。

メモ

substringモードでは、検索パターンが文字通り一致します。 .*%などの文字は、正則表現やワイルドカード文字として特別な意味を持ちません。

以下のタイプは文字列検索が可能です:

タイプ 文字列検索可能な場合
VOIDSTRINGVARIANT いつも。
ARRAY 子式は文字列検索が可能です。
MAP その値式は文字列検索可能です。
STRUCT 少なくとも1つのフィールド式は文字列検索が可能です。

STRUCT式の場合、isearch文字列検索できないフィールドは無視します。

VARIANT式については、isearchは型VOIDまたはSTRINGの葉ノードのみをスキャンします。

isearch式は、非STRING式をSTRING式に暗黙的にキャストするわけではありません。

リターン値は次のように決定されます。

  • NULL もし検索パターンが NULLなら。
  • true 検索パターンが少なくとも1つの文字列検索可能な値と一致し、ケースは無視します。
  • NULL 検索パターンが文字列検索可能な値と一致せず、そのうち少なくとも1つの値が NULLされている場合。
  • false 検索パターンが文字列検索可能な値と一致せず、それらの値がいずれも NULLしていない場合。

モードには以下の値がサポートされています:

  • 'substring': 検索パターンがターゲット値のどこかに現れた場合、小文字は無視します。 これが既定のオプションです。
  • 'word'検索パターンは UAX#29 の単語境界で単語に分割されています。 このモードは、検索パターン内の単語の順序に関係なく一致します。 各パターンワードは、その値の前後にUAX#29ワード境界が存在し、格を無視して文字列検索可能な値と一致します。 単語を含まないパターン、例えば '!!!'' 'は、上 SEARCH_INVALID_WORD_PATTERNになります。

テーブル上の isearch パフォーマンスは、あらかじめ構築された全文検索インデックスによって恩恵を受けられます。 詳細は Unity Catalog管理のテーブルの全文検索インデックス をご覧ください。

一般的なエラー状態

Examples

-- Basic examples.

-- Substring mode (default).
> SELECT isearch(column, 'needle', mode => 'substring') FROM VALUES ('Needle') AS table(column);
 true

> SELECT isearch(column, 'quick fox', mode => 'substring') FROM VALUES ('quick brown fox') AS table(column);
 false

> SELECT isearch(column, 'FOO.BAR', mode => 'substring') FROM VALUES ('prefix foo.bar suffix') AS table(column);
 true -- the period is matched literally, and letter case is ignored.

> SELECT isearch(column, 'FOO.BAR', mode => 'substring') FROM VALUES ('prefix fooXbar suffix') AS table(column);
 false -- the period does not match an arbitrary character.

> SELECT isearch(column, '100%', mode => 'substring') FROM VALUES ('100 percent'), ('100%') AS table(column);
 false
 true -- the percent sign is not a wildcard.

> SELECT isearch(column, lower('NEEDLE')) FROM VALUES ('needle') AS table(column);
 true

-- Non-ASCII case-insensitive matching.
> SELECT isearch(column, 'κόσμος', mode => 'substring') FROM VALUES ('ΚΌΣΜΟΣ') AS table(column);
 true

> SELECT isearch(column, 'οσ', mode => 'substring') FROM VALUES ('ΟΣ') AS table(column);
 true -- sigma folding (`σ` and final `ς`).

-- Word mode.
> SELECT isearch(column, 'fox quick', mode => 'word') FROM VALUES ('Quick Brown Fox') AS table(column);
 true

> SELECT isearch(column, 'slow fox', mode => 'word') FROM VALUES ('quick fox') AS table(column);
 false

> SELECT isearch(column, 'FOO*BAR', mode => 'word') FROM VALUES ('bar and foo') AS table(column);
 true -- the asterisk separates the pattern words; it is not a wildcard.

-- Examples on a table with a VARIANT column.
> CREATE TABLE test_table AS
    SELECT parse_json('{
      "role": "user",
      "id": 101,
      "preferences": {"theme": "dark", "language": "en"}
    }') AS column;

> SELECT isearch(column, 'USER', mode => 'substring') FROM test_table;
 true

> SELECT isearch(column, 'PREFERENCES', mode => 'substring') FROM test_table;
 false -- only values are searched.

> SELECT isearch(column, '101', mode => 'substring') FROM test_table;
 false -- no implicit cast to string.

-- NULL behavior.
> SELECT isearch(NULL, 'needle', mode => 'substring');
 NULL

> SELECT isearch(CAST(NULL AS STRING), 'needle', mode => 'substring');
 NULL

> SELECT isearch(CAST(NULL AS INT), 'needle', mode => 'substring');
 false

> SELECT isearch('needle in haystack', NULL, mode => 'substring');
 NULL

-- Search across multiple columns.
> SELECT isearch(column1, column2, '123', mode => 'substring')
    FROM VALUES (123, 'needle in haystack') AS table(column1, column2);
 false -- integer column is skipped, no implicit cast to string.

> SELECT isearch(column1, column2, 'NEEDLE', mode => 'substring')
    FROM VALUES (123, 'needle in haystack') AS table(column1, column2);
 true