PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Ekspresi reguler dalam klausa LIKE PostgreSQL

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara saya menanyakan semua baris dalam radius 5 mil dari koordinat saya?

  2. Berikan hak istimewa untuk database tertentu di PostgreSQL

  3. Bagaimana cara menggunakan jpa data pegas untuk menanyakan kolom jsonb?

  4. Parameter konfigurasi work_mem di PostgreSQL di Linux

  5. Hasilkan SQL untuk memperbarui kunci utama