Seperti komentar @a_horse, Anda harus menggunakan operator ekspresi reguler ~
untuk menggunakan ekspresi kurung.
Tapi masih ada lagi. Saya sarankan:
SELECT *
FROM tbl
WHERE value ~ '^00[^0]'
^
... cocok di awal string (ekspresi asli Anda bisa cocok di apa saja posisi).[^0]
... ekspresi tanda kurung (kelas karakter) yang cocok dengan apa saja karakter yang bukan 0
.
Atau lebih baik , belum:
SELECT *
FROM tbl
WHERE value LIKE '00%' -- starting with '00'
AND value NOT LIKE '000%' -- third character is not '0'
Mengapa? LIKE
tidak sekuat, tetapi biasanya lebih cepat daripada ekspresi reguler. Mungkin jauh lebih cepat untuk mempersempit kumpulan kandidat dengan LIKE
yang murah ekspresi.
Umumnya, Anda akan menggunakan NOT LIKE '__0'
, tapi karena kita sudah membuat LIKE '00%'
pada predikat lainnya, kita dapat menggunakan pola yang lebih sempit (lebih murah) NOT LIKE '000'
.
Postgres dapat menggunakan indeks btree sederhana untuk ekspresi berlabuh kiri value LIKE '00%'
(penting untuk tabel besar), sementara itu mungkin tidak berfungsi untuk ekspresi reguler yang lebih kompleks. Postgres versi terbaru dapat menggunakan indeks untuk ekspresi reguler sederhana, sehingga mungkin bekerja untuk contoh ini. Detail:
- Perbedaan LIKE dan ~ di Postgres