MariaDB
 sql >> Teknologi Basis Data >  >> RDS >> MariaDB

Bagaimana REGEXP_INSTR() Bekerja di MariaDB

Di MariaDB, REGEXP_INSTR() fungsi mengembalikan indeks awal substring yang cocok dengan pola ekspresi reguler.

Indeks dimulai dari 1 . Jika tidak ada yang cocok, hasilnya adalah 0 .

Sintaks

Sintaksnya seperti ini:

REGEXP_INSTR(subject, pattern)

Dimana subject adalah string input dan pattern adalah pola ekspresi reguler untuk substring.

Perhatikan bahwa, pada saat penulisan, REGEXP_INSTR() versi MariaDB menerima argumen lebih sedikit daripada REGEXP_INSTR() MySQL . Versi MySQL memungkinkan Anda memberikan argumen untuk posisi awal pencarian, kemunculan mana yang harus dicari, jenis posisi mana yang akan dikembalikan, serta cara untuk menyaring ekspresi reguler.

Contoh

Berikut ini contoh dasarnya:

SELECT REGEXP_INSTR('Cat', 'at');

Hasil:

+---------------------------+
| REGEXP_INSTR('Cat', 'at') |
+---------------------------+
|                         2 |
+---------------------------+

Dalam hal ini ada kecocokan, dan substring dimulai pada posisi 2.

Tidak Cocok

Berikut ini contoh di mana tidak ada kecocokan:

SELECT REGEXP_INSTR('Cat', '^at');

Hasil:

+----------------------------+
| REGEXP_INSTR('Cat', '^at') |
+----------------------------+
|                          0 |
+----------------------------+

Tidak ada yang cocok, jadi hasilnya 0 . Tidak ada kecocokan karena saya menetapkan bahwa string harus dimulai dengan substring.

Mari kita ubah agar tidak mulai dengan substring itu:

SELECT REGEXP_INSTR('at', '^at');

Hasil:

+---------------------------+
| REGEXP_INSTR('at', '^at') |
+---------------------------+
|                         1 |
+---------------------------+

Sensitivitas Huruf Besar

REGEXP_INSTR() fungsi mengikuti aturan sensitivitas huruf dari susunan yang efektif. Pencocokan dilakukan dengan tidak peka huruf besar/kecil untuk susunan huruf besar/kecil, dan peka huruf besar/kecil untuk susunan huruf besar/kecil dan untuk data biner.

Ini contohnya:

SELECT 
    REGEXP_INSTR('Cat', 'c') AS "My Default",
    REGEXP_INSTR(_latin7'Cat' COLLATE latin7_general_ci, 'c') AS "Case Insensitive",
    REGEXP_INSTR(_latin7'Cat' COLLATE latin7_general_cs, 'c') AS "Case Sensitive";

Hasil:

+------------+------------------+----------------+
| My Default | Case Insensitive | Case Sensitive |
+------------+------------------+----------------+
|          1 |                1 |              0 |
+------------+------------------+----------------+

Susunan default saya tidak peka huruf besar-kecil. Dua string lainnya dipaksa ke susunan case-sensitive dan collation case sensitive masing-masing.

Memberikan BINARY string juga peka huruf besar/kecil (lihat di bawah).

String Biner

Secara default, posisi diukur dalam karakter, bukan byte. Namun, Anda dapat mentransmisikan set karakter multi-byte ke BINARY untuk mendapatkan offset dalam byte jika perlu.

Contoh:

SELECT 
    REGEXP_INSTR('© Cat', 'C') AS "Character",
    REGEXP_INSTR(BINARY '© Cat', 'C') AS "Binary";

Hasil:

+-----------+--------+
| Character | Binary |
+-----------+--------+
|         3 |      4 |
+-----------+--------+

Simbol hak cipta menggunakan dua byte, dan oleh karena itu dalam contoh ini kita mendapatkan hasil 4 saat mentransmisikannya ke BINARY , dibandingkan dengan 3 yang kita dapatkan sebaliknya.

Meskipun perhatikan bahwa melewati BINARY string juga mempengaruhi sensitivitas kasus. Dengan BINARY string, karakter huruf besar berbeda dengan huruf kecilnya:

SELECT 
    REGEXP_INSTR('© Cat', 'c') AS "Character",
    REGEXP_INSTR(BINARY '© Cat', 'c') AS "Binary";

Hasil:

+-----------+--------+
| Character | Binary |
+-----------+--------+
|         3 |      0 |
+-----------+--------+

Di sini, saya mencari huruf kecil c bukannya huruf besar, dan BINARY string tidak cocok.

Argumen Null

Melewati null karena argumen apa pun menghasilkan null :

SELECT 
    REGEXP_INSTR(null, 'c') AS "1",
    REGEXP_INSTR('Cat', null) AS "2",
    REGEXP_INSTR(null, null) AS "3";

Hasil:

+------+------+------+
| 1    | 2    | 3    |
+------+------+------+
| NULL | NULL | NULL |
+------+------+------+

Jumlah Argumen Salah

Melewati jumlah argumen yang salah atau tidak ada argumen, menghasilkan kesalahan:

SELECT REGEXP_INSTR('Cat');

Hasil:

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'REGEXP_INSTR'

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 2 Cara untuk Mengetahui Kuartal Mana yang Termasuk dalam Tanggal di MariaDB

  2. Cara Menyebarkan Cluster MySQL atau MariaDB Galera Siap Produksi Menggunakan ClusterControl

  3. Cadangan &PostgreSQL MariaDB di Cloud - Rilis ClusterControl 1.6.1

  4. 4 Fungsi yang Mengembalikan Bagian Detik dari Nilai Waktu di MariaDB

  5. Kembalikan Baris Acak dari Tabel di MariaDB