fungsi isearch

Berlaku untuk:check ditandai ya Databricks Runtime 19.0 ke atas

Important

Fitur ini ada di Beta. Admin ruang kerja dapat mengontrol akses ke fitur ini dari halaman Pratinjau . Lihat Kelola Pratinjau Azure Databricks.

Melakukan pencarian teks tanpa huruf besar/kecil dalam ekspresi target tertentu.

isearch adalah varian search fungsi yang tidak peka huruf besar/kecil dengan perilaku yang identik.

Syntax

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

Arguments

  • expr: Ekspresi yang harus dicari di dalamnya.
  • search_pattern: Ekspresi konstan STRING yang menunjukkan teks yang akan dicari.
  • mode: Opsional. Literal tanpa huruf STRING besar/kecil yang mengontrol bagaimana pencocokan dilakukan. Nilai yang berlaku adalah 'substring' atau 'word'. Nilai defaultnya adalah 'substring'.

Returns

Nilai yang BOOLEAN menunjukkan apakah pola pencarian cocok dengan ekspresi target yang dapat dicari secara string, mengabaikan huruf kecil.

Notes

Dalam substring mode, pola pencarian dicocokkan secara harfiah. Karakter seperti ., *, dan % tidak memiliki makna khusus sebagai karakter ekspresi reguler atau wildcard.

Jenis berikut dapat dicari secara string:

Type Dapat dicari secara string ketika
VOID, STRING, VARIANT Selalu.
ARRAY Ekspresi anaknya dapat dicari secara string.
MAP Ekspresi nilainya dapat dicari secara string.
STRUCT Setidaknya satu ekspresi bidangnya dapat dicari secara string.

Untuk STRUCT ekspresi, isearch mengabaikan bidang yang tidak dapat dicari secara string.

Untuk VARIANT ekspresi, isearch hanya memindai node daun mereka yang bertipe VOID atau STRING.

Ekspresi ini isearch tidak secara implisit melemparkan non-ekspresiSTRING ke STRING ekspresi.

Nilai pengembalian ditentukan sebagai berikut:

  • NULL jika pola pencarian adalah NULL.
  • true Jika pola pencarian cocok dengan setidaknya satu nilai yang dapat dicari dengan string, abaikan huruf besar.
  • NULL jika pola pencarian tidak cocok dengan nilai yang dapat dicari oleh string, dan setidaknya salah satu dari nilai tersebut adalah NULL.
  • false jika pola pencarian tidak cocok dengan nilai yang dapat dicari oleh string, dan tidak ada nilai tersebut yang bernilai NULL.

Nilai-nilai berikut didukung untuk mode ini:

  • 'substring': Cocok jika pola pencarian muncul di mana saja dalam nilai target, mengabaikan huruf besar. Ini adalah opsi default.
  • 'word': Pola pencarian dibagi menjadi kata-kata di batas kata UAX#29 . Mode ini mencocokkan kata-kata individual dalam pola pencarian tanpa memandang urutannya. Setiap kata pola cocok dengan nilai yang dapat dicari string jika muncul dalam nilai dengan batas kata UAX#29 tepat sebelum dan sesudahnya, mengabaikan huruf kecil. Pola yang tidak mengandung kata-kata, seperti '!!!' atau ' ', menaikkan SEARCH_INVALID_WORD_PATTERN.

Performa isearch di tabel dapat memperoleh manfaat dari indeks pencarian teks lengkap yang sudah ada. Lihat Indeks pencarian teks lengkap pada tabel terkelola Unity Catalog untuk detailnya.

Kondisi kesalahan umum

Contoh

-- 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