pengembangan-web-mp.com

Cara regex dalam kueri MySQL

Saya memiliki tugas sederhana di mana saya perlu mencari catatan yang dimulai dengan karakter string dan satu digit setelahnya. Yang saya coba adalah ini

SELECT trecord FROM `tbl` WHERE (trecord LIKE 'ALA[d]%')

Dan

SELECT trecord FROM `tbl` WHERE (trecord LIKE 'ALA[0-9]%')

Namun kedua kueri selalu mengembalikan catatan null

trecord
-------
null

Dimana seolah-olah saya menjalankan query berikut

SELECT trecord FROM `tbl` WHERE (trecord LIKE 'ALA%')

ia kembali

trecord
-------
ALA0000
ALA0001
ALA0002

Itu berarti bahwa saya memiliki catatan yang dimulai dengan ALA dan digit setelahnya,

EDIT

Saya melakukannya menggunakan PHP MySQL dan mesin innodb untuk lebih spesifik.

41
zzlalani

Saya pikir Anda dapat menggunakan REGEXP daripada LIKE

SELECT trecord FROM `tbl` WHERE (trecord REGEXP '^ALA[0-9]')
66
Wietze314

Dalam kasus saya (Oracle), ini WHERE REGEXP_LIKE(column, 'regex.*'). Lihat di sini :

Fungsi SQL

Keterangan


REGEXP_LIKE

Fungsi ini mencari kolom karakter untuk suatu pola. Gunakan fungsi ini di klausa WHERE kueri untuk mengembalikan baris yang cocok dengan ekspresi reguler yang Anda tentukan.

...

REGEXP_REPLACE

Fungsi ini mencari pola di kolom karakter dan mengganti setiap kemunculan pola itu dengan pola yang Anda tentukan.

...

REGEXP_INSTR

Fungsi ini mencari string untuk kejadian tertentu dari pola ekspresi reguler. Anda menentukan kejadian mana yang ingin Anda temukan dan posisi awal untuk mencari. Fungsi ini mengembalikan bilangan bulat yang menunjukkan posisi dalam string tempat kecocokan ditemukan.

...

REGEXP_SUBSTR

Fungsi ini mengembalikan substring aktual yang cocok dengan pola ekspresi reguler yang Anda tentukan.

(Tentu saja, REGEXP_LIKE hanya cocok dengan kueri yang berisi string pencarian, jadi jika Anda ingin kecocokan lengkap, Anda harus menggunakan '^$' untuk pertandingan awal (^) dan akhir ($), misalnya: '^regex.*$'.)

4
Andrew