isearch 函數

適用於:勾選已標記為 Databricks 執行時間 19.0 及以上版本

Important

這項功能位於 測試版 (Beta) 中。 工作區管理員可以從 「預覽 」頁面控制對此功能的存取。 請參閱 管理 Azure Databricks 預覽。

執行指定目標表達式內的文字不區分大小寫的搜尋。

isearch是功能中具有其他相同行為的大小寫不區分變體search

Syntax

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

Arguments

  • expr:那些可以尋找內心的表情。
  • search_pattern: 一個表示要搜尋的文本的常數 STRING 表達式。
  • mode:選擇性。 一個不區分 STRING 大小寫的文字,用來控制匹配的執行方式。 有效值為 'substring''word'。 預設值為 'substring'

Returns

一個 BOOLEAN 表示搜尋模式是否符合任何字串可搜尋目標表達式的值,忽略格。

Notes

在模式中 substring ,搜尋模式會被字面上匹配。 像 .*、 和 % 這類字元作為正則表達式或萬用字元並無特殊意義。

以下類型可字串搜尋:

類型 字串可搜尋
VOIDSTRINGVARIANT 總是。
ARRAY 其子表達式可字串搜尋。
MAP 其值表達式可字串搜尋。
STRUCT 至少有一個欄位表達式是可字串搜尋的。

對於 STRUCT 表達式,忽略 isearch 無法字串搜尋的欄位。

對於 VARIANT 表達式, isearch 僅掃描其類型 VOID 為 或 STRING的葉節點。

isearch 表達式不會隱含地將非STRING 表達式投射到表達式 STRING 上。

回報價值的計算方式如下:

  • NULL 若搜尋模式為 NULL
  • true 如果搜尋模式至少符合一個字串可搜尋的值,則忽略格。
  • NULL 如果搜尋模式不符合任何可字串搜尋的值,且至少有一個值為 NULL
  • false如果搜尋模式不符合任何可搜尋的字串值,且這些值都不符合。NULL

該模式支援以下數值:

  • 'substring': 若搜尋模式出現在目標值內,則不考慮大小寫,則為匹配。 這是預設選項。
  • 'word'搜尋模式在 UAX#29 字邊界被分割成單字。 此模式會匹配搜尋模式中單字,無論順序如何。 每個模式字若出現在值前後緊接著 UAX#29 字邊界(忽略格)時,則該字詞與可字串搜尋值相符。 若圖案中無字, '!!!' 如 或 ' ',則 SEARCH_INVALID_WORD_PATTERN升起。

isearch桌面上的效能可從預先建構的全文搜尋索引中受益。 詳情請參閱 Unity 目錄管理表格上的全文搜尋索引

常見錯誤條件

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