Lindorm SQL mendukung berbagai fungsi string untuk memanipulasi, mencari, dan melakukan penghashan nilai string. Semua fungsi yang dijelaskan pada halaman ini memerlukan LindormTable versi 2.5.1.1 atau lebih baru.
Untuk memeriksa versi saat ini atau melakukan upgrade, lihat Catatan rilis LindormTable dan Upgrade versi mesin minor instans Lindorm.
Fungsi string yang didukung
| Kategori | Fungsi | Deskripsi |
|---|---|---|
| Manipulasi umum | Menggabungkan beberapa string menjadi satu string | |
| Mengembalikan jumlah karakter dalam suatu string | ||
| Mengganti semua kemunculan substring | ||
| Membalik urutan karakter dalam string | ||
| Mengekstrak substring berdasarkan posisi dan panjang | ||
| Menghapus spasi di awal dan akhir string | ||
| Konversi kapitalisasi | Mengonversi semua huruf menjadi huruf kecil | |
| Mengonversi semua huruf menjadi huruf besar | ||
| Ekspresi reguler | Mengganti substring yang sesuai dengan ekspresi reguler | |
| Mengekstrak substring pertama yang sesuai dengan ekspresi reguler | ||
| Pencocokan awalan | Mengembalikan true jika string diawali dengan awalan tertentu | |
| Pencarian teks penuh | Mencocokkan nilai kolom terhadap ekspresi pencarian menggunakan indeks pencarian | |
| Hash kriptografi | Mengembalikan hash MD5 dari suatu string | |
| Mengembalikan hash SHA256 dari suatu string |
CONCAT
Menggabungkan dua atau lebih string menjadi satu string tanpa menambahkan pembatas di antara nilai-nilai tersebut.
Sintaks
CONCAT('string1', 'string2', ..., 'stringN')Parameter
| Parameter | Wajib | Deskripsi |
|---|---|---|
'string1', 'string2', ..., 'stringN' | Ya | String yang akan digabungkan. Masukkan dua atau lebih nilai string. |
Contoh
SELECT concat('a', 'b', 'c') AS val;Hasil:
+-----+
| val |
+-----+
| abc |
+-----+LENGTH
Mengembalikan jumlah karakter dalam suatu string.
Sintaks
LENGTH('string')Parameter
| Parameter | Wajib | Deskripsi |
|---|---|---|
string | Ya | String yang akan diukur. |
Contoh
SELECT length('abc') AS len;Hasil:
+-----+
| len |
+-----+
| 3 |
+-----+LOWER
Mengonversi semua huruf dalam string menjadi huruf kecil. Karakter non-huruf tidak terpengaruh.
Sintaks
LOWER('string')Parameter
| Parameter | Wajib | Deskripsi |
|---|---|---|
string | Ya | String yang akan dikonversi. |
Contoh
Contoh 1: Konversi ABC menjadi huruf kecil.
SELECT lower('ABC') AS val;Hasil:
+-----+
| val |
+-----+
| abc |
+-----+Contoh 2: Konversi string campuran menjadi huruf kecil.
SELECT lower('Abc') AS val;Hasil:
+-----+
| val |
+-----+
| abc |
+-----+UPPER
Mengonversi semua huruf dalam string menjadi huruf besar. Karakter non-huruf tidak terpengaruh.
Sintaks
UPPER('string')Parameter
| Parameter | Wajib | Deskripsi |
|---|---|---|
string | Ya | String yang akan dikonversi. |
Contoh
Contoh 1: Konversi abc menjadi huruf besar.
SELECT upper('abc') AS val;Hasil:
+-----+
| val |
+-----+
| ABC |
+-----+Contoh 2: Konversi string campuran menjadi huruf besar.
SELECT upper('aBC') AS val;Hasil:
+-----+
| val |
+-----+
| ABC |
+-----+TRIM
Menghapus spasi di awal dan akhir string. Spasi di dalam string tetap dipertahankan.
Sintaks
TRIM('string')Parameter
| Parameter | Wajib | Deskripsi |
|---|---|---|
string | Ya | String yang akan dipangkas. |
Contoh
SELECT trim(' abc ') AS str;Hasil:
+-----+
| str |
+-----+
| abc |
+-----+REPLACE
Mengganti semua kemunculan substring dalam suatu string.
Sintaks
REPLACE('string', 'from_str', 'to_str')Parameter
| Parameter | Wajib | Deskripsi |
|---|---|---|
string | Ya | String sumber. |
from_str | Ya | Substring yang akan dicari dan diganti. |
to_str | Ya | Substring pengganti. |
Contoh
Contoh 1: Ganti bc dalam abc dengan cd.
SELECT replace('abc', 'bc', 'cd') AS val;Hasil:
+-----+
| val |
+-----+
| acd |
+-----+Contoh 2: Ganti semua kemunculan bc dalam abcbc dengan cd.
SELECT replace('abcbc', 'bc', 'cd') AS val;Hasil:
+-------+
| val |
+-------+
| acdcd |
+-------+REVERSE
Membalik urutan karakter dalam string.
Sintaks
REVERSE('string')Parameter
| Parameter | Wajib | Deskripsi |
|---|---|---|
string | Ya | String yang akan dibalik. |
Contoh
SELECT reverse('abc') AS val;Hasil:
+-----+
| val |
+-----+
| cba |
+-----+SUBSTR
Mengekstrak substring mulai dari posisi tertentu, dengan batas panjang opsional.
Sintaks
SUBSTR(string, position [, length])Parameter
| Parameter | Wajib | Deskripsi |
|---|---|---|
string | Ya | String sumber. |
position | Ya | Posisi berbasis 1 tempat ekstraksi dimulai. Harus berupa bilangan bulat >= 1. |
length | Tidak | Jumlah karakter yang akan diekstrak. Harus berupa bilangan bulat >= 1. Nilai default: mengekstrak dari position hingga akhir string. |
Contoh
Contoh 1: Ekstrak dari posisi 2 hingga akhir string.
SELECT substr('abc', 2) AS val;Hasil:
+-----+
| val |
+-----+
| bc |
+-----+Contoh 2: Ekstrak 2 karakter mulai dari posisi 1.
SELECT substr('abc', 1, 2) AS val;Hasil:
+-----+
| val |
+-----+
| ab |
+-----+START_WITH
Mengembalikan true jika string diawali dengan awalan yang ditentukan, dan false jika tidak.
Sintaks
START_WITH('string', 'prefix')Parameter
| Parameter | Wajib | Deskripsi |
|---|---|---|
string | Ya | String yang akan diperiksa. |
prefix | Ya | Awalan yang akan dicocokkan terhadap awal string. |
Contoh
Contoh 1: Periksa apakah abc diawali dengan ab.
SELECT start_with('abc', 'ab') AS val;Hasil:
+------+
| val |
+------+
| true |
+------+Contoh 2: Periksa apakah abc diawali dengan bc.
SELECT start_with('abc', 'bc') AS val;Hasil:
+-------+
| val |
+-------+
| false |
+-------+REGEXP_REPLACE
Mengganti substring yang sesuai dengan ekspresi reguler, dimulai dari posisi tertentu.
Sintaks
REGEXP_REPLACE('string', pattern, replacement [, position])Parameter
| Parameter | Wajib | Deskripsi |
|---|---|---|
string | Ya | String sumber. |
pattern | Ya | Pola ekspresi reguler yang menentukan aturan pencocokan. |
replacement | Ya | String yang akan menggantikan setiap kecocokan. |
position | Tidak | Posisi karakter berbasis 1 tempat pencarian dimulai. Harus berupa bilangan bulat >= 1. Nilai default: 1 (dimulai dari karakter pertama). |
Contoh
Contoh 1: Ganti semua kecocokan b dalam abc dengan c (posisi default).
SELECT regexp_replace('abc', 'b', 'c') AS val;Hasil:
+-----+
| val |
+-----+
| acc |
+-----+Contoh 2: Ganti kecocokan b dalam abcbc mulai dari posisi 2.
SELECT regexp_replace('abcbc', 'b', 'c', 2) AS val;Hasil:
+-------+
| val |
+-------+
| acccc |
+-------+Contoh 3: Ganti kecocokan b dalam abcbc mulai dari posisi 3. b pada posisi 2 tidak diganti.
SELECT regexp_replace('abcbc', 'b', 'c', 3) AS val;Hasil:
+-------+
| val |
+-------+
| abccc |
+-------+REGEXP_SUBSTR
Mengembalikan substring pertama yang sesuai dengan ekspresi reguler, dimulai dari posisi tertentu.
Sintaks
REGEXP_SUBSTR('string', pattern [, position])Parameter
| Parameter | Wajib | Deskripsi |
|---|---|---|
string | Ya | String sumber. |
pattern | Ya | Pola ekspresi reguler yang menentukan aturan pencocokan. |
position | Tidak | Posisi karakter berbasis 1 tempat pencarian dimulai. Harus berupa bilangan bulat >= 1. Nilai default: 1 (dimulai dari karakter pertama). |
Contoh
Contoh 1: Cari b dalam abc dari karakter pertama (default).
SELECT regexp_substr('abc', 'b') AS val;Hasil:
+-----+
| val |
+-----+
| b |
+-----+Contoh 2: Cari b dalam abc mulai dari posisi 3. Tidak ditemukan kecocokan karena b berada di posisi 2.
SELECT regexp_substr('abc', 'b', 3) AS val;Hasil:
+-----+
| val |
+-----+
| |
+-----+MD5
Mengembalikan hash MD5 dari suatu string.
Sintaks
MD5('string')Parameter
| Parameter | Wajib | Deskripsi |
|---|---|---|
string | Ya | String yang akan di-hash. |
Contoh
SELECT md5('abc') AS val;Hasil:
+----------------------------------+
| val |
+----------------------------------+
| 900150983cd24fb0d6963f7d28e17f72 |
+----------------------------------+SHA256
Mengembalikan hash SHA256 dari suatu string.
Sintaks
SHA256('string')Parameter
| Parameter | Wajib | Deskripsi |
|---|---|---|
string | Ya | String yang akan di-hash. |
Contoh
Contoh ini membuat tabel sampel, memasukkan satu baris, lalu mengkueri hash SHA256 dari nilai kolom.
-- Buat tabel sampel.
CREATE TABLE tb (id INT, name VARCHAR, address VARCHAR, PRIMARY KEY(id, name));
-- Masukkan satu baris.
UPSERT INTO tb (id, name, address) VALUES (1, 'jack', 'hz');
-- Kueri hash SHA256 dari kolom name.
SELECT sha256(name) AS sc FROM tb WHERE id = 1;Hasil:
+------------------------------------------------------------------+
| sc |
+------------------------------------------------------------------+
| 31611159e7e6ff7843ea4627745e89225fc866621cfcfdbd40871af4413747cc |
+------------------------------------------------------------------+MATCH
Mencari nilai kolom menggunakan ekspresi pencarian teks penuh dan indeks pencarian. Hasil diurutkan berdasarkan relevansi secara menurun secara default.
MATCH memerlukan LindormTable versi 2.7.2 atau lebih baru. Untuk upgrade, lihat Catatan rilis LindormTable dan upgrade instans Anda.
MATCH hanya berfungsi dengan indeks pencarian. Ketika kondisi MATCH dan indeks pencarian keduanya tersedia, sistem secara otomatis menggunakan indeks pencarian.
Catatan penggunaan
Kolom non-terindeks: Sistem pertama-tama mengambil baris melalui indeks pencarian, lalu menyaring kolom non-terindeks satu per satu. Hal ini dapat menurunkan performa pada set data besar. Untuk menghindarinya, gunakan pernyataan ADD COLUMN untuk menambahkan kolom terkait ke dalam indeks pencarian.
Tabel utama dan indeks sekunder: MATCH tidak didukung pada tabel utama atau indeks sekunder. Untuk itu, gunakan
LIKEuntuk kueri fuzzy. Kueri fuzzy memberikan performa lebih rendah dibandingkan kueri bertoken.Menggabungkan MATCH dan LIKE: Saat menggunakan keduanya dalam satu kueri yang sama, konfigurasikan kolom terkait sebagai kolom bertoken dalam indeks pencarian.
Sintaks
MATCH (column_identifiers) AGAINST (search_expr)MATCH hanya dapat digunakan dalam klausa WHERE pernyataan SELECT.
Parameter
| Parameter | Wajib | Deskripsi |
|---|---|---|
column_identifiers | Ya | Satu atau beberapa nama kolom yang akan dicari, dipisahkan koma. Jika beberapa kolom ditentukan, nilai-nilainya digabungkan dan dicocokkan bersama. Indeks pencarian harus tersedia untuk semua kolom yang ditentukan, dengan alat analisis dikonfigurasi untuk segmentasi kata. Lihat Aktifkan fitur indeks pencarian dan CREATE INDEX. |
search_expr | Ya | Konstanta string yang menentukan aturan pencocokan. Lihat Sintaks aturan pencocokan di bawah ini. |
Sintaks aturan pencocokan
Aturan pencocokan terdiri dari satu atau beberapa kondisi yang dipisahkan spasi. Setiap kondisi adalah salah satu dari berikut:
Satu kata — mencocokkan baris yang berisi kata tersebut. Contoh:
helloFrasa dalam tanda kutip — mencocokkan baris yang berisi frasa persis tanpa segmentasi kata. Contoh:
"hello world"Sub-aturan dalam tanda kurung — mencocokkan baris yang memenuhi aturan di dalamnya. Contoh:
(another "hello world")
Tambahkan simbol di awal kondisi untuk mengubah perilakunya:
| Simbol | Makna |
|---|---|
+ | Kondisi harus dipenuhi (AND) |
- | Kondisi tidak boleh dipenuhi (NOT) |
| *(tidak ada)* | Kondisi opsional, tetapi baris yang cocok memiliki peringkat lebih tinggi |
Contoh
Contoh berikut menggunakan tabel sampel ini:
-- Buat tabel sampel.
CREATE TABLE tb (id INT, c1 VARCHAR, PRIMARY KEY(id));
-- Buat indeks pencarian. Aktifkan fitur indeks pencarian sebelum menjalankan pernyataan ini.
CREATE INDEX idx USING SEARCH ON tb (c1(type=text));
-- Masukkan baris.
UPSERT INTO tb (id, c1) VALUES (1, 'hello');
UPSERT INTO tb (id, c1) VALUES (2, 'world');
UPSERT INTO tb (id, c1) VALUES (3, 'hello world');
UPSERT INTO tb (id, c1) VALUES (4, 'hello my world');
UPSERT INTO tb (id, c1) VALUES (5, 'hello you');
UPSERT INTO tb (id, c1) VALUES (6, 'hello you and me');
UPSERT INTO tb (id, c1) VALUES (7, 'you and me');Contoh 1: Kembalikan baris di mana c1 berisi hello atau world (atau keduanya). Baris yang cocok dengan kedua istilah memiliki peringkat lebih tinggi.
SELECT * FROM tb WHERE MATCH (c1) AGAINST ('hello world');Hasil:
+----+------------------+
| id | c1 |
+----+------------------+
| 3 | hello world |
| 2 | world |
| 4 | hello my world |
| 5 | hello you |
| 1 | hello |
| 6 | hello you and me |
+----+------------------+Contoh 2: Kembalikan baris di mana c1 harus berisi world dan secara opsional berisi hello. Baris dengan kedua istilah memiliki peringkat lebih tinggi.
SELECT * FROM tb WHERE MATCH (c1) AGAINST ('hello +world');Hasil:
+----+----------------+
| id | c1 |
+----+----------------+
| 3 | hello world |
| 2 | world |
| 4 | hello my world |
+----+----------------+Contoh 3: Kembalikan baris di mana c1 berisi world tetapi tidak berisi hello.
SELECT * FROM tb WHERE MATCH (c1) AGAINST ('-hello +world');Hasil:
+----+-------+
| id | c1 |
+----+-------+
| 2 | world |
+----+-------+Contoh 4: Kembalikan baris di mana c1 berisi frasa persis hello world.
SELECT * FROM tb WHERE MATCH (c1) AGAINST ('"hello world"');Hasil:
+----+-------------+
| id | c1 |
+----+-------------+
| 3 | hello world |
+----+-------------+Contoh 5: Kembalikan baris di mana c1 harus berisi hello dan minimal salah satu dari you atau me.
SELECT * FROM tb WHERE MATCH (c1) AGAINST ('+hello +(you me)');Hasil:
+----+------------------+
| id | c1 |
+----+------------------+
| 6 | hello you and me |
| 5 | hello you |
+----+------------------+