fungsi search

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 dalam ekspresi target yang ditentukan.

search adalah varian isearch fungsi yang sensitif huruf besar-besaran dengan perilaku yang selebihnya identik.

Syntax

search ( 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.

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, search mengabaikan bidang yang tidak dapat dicari secara string.

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

Ekspresi ini search 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 oleh string.
  • 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. 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 dengan string jika muncul dalam nilai dengan batas kata UAX#29 tepat sebelum dan sesudahnya. Pola yang tidak mengandung kata-kata, seperti '!!!' atau ' ', menaikkan SEARCH_INVALID_WORD_PATTERN.

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