search 関数

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

重要

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

指定されたターゲット表現内のテキスト検索を行います。

search は、他に同一の挙動を持つ isearch 関数 の大文字を区別する変種です。

Syntax

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

引数

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

返品

検索パターンが任意の文字列検索可能なターゲット表現に一致するかどうかを示す BOOLEAN 値です。

Notes

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

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

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

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

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

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

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

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

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

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

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

一般的なエラー状態

Examples

-- Basic examples.

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

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

> SELECT search(column, 'foo.bar', mode => 'substring') FROM VALUES ('prefix foo.bar suffix') AS table(column);
 true -- the period is matched literally.

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

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

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

-- Word mode.
> SELECT search(column, 'fox quick', mode => 'word') FROM VALUES ('quick brown fox') AS table(column);
 true

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

> SELECT search(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 search(column, 'user', mode => 'substring') FROM test_table;
 true

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

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

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

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

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

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

-- Search across multiple columns.
> SELECT search(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 search(column1, column2, 'needle', mode => 'substring')
    FROM VALUES (123, 'needle in haystack') AS table(column1, column2);
 true