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

Masalah regex postgres

Anda tidak perlu keluar dari - di dalam kelas karakter ketika Anda meletakkannya di posisi pertama atau terakhir, karena itu tidak dapat salah dibaca sebagai rentang seperti itu:

[\- ] -> [- ]
[\d\- ] -> [\d -]

Cara Anda memilikinya batas atas 10 pada akhirnya sia-sia.
Tambahkan $ di bagian akhir untuk melarang karakter tambahan.
Atau \D untuk melarang digit di akhir (tetapi memerlukan non-digit).
Atau ($|\D) untuk mengakhiri string di sana atau mengikuti non-digit.

Satukan:

SELECT '+79637434199' ~ '^(8|\+7)[ -]?(\(?\d{3}\)?[ -]?)[\d -]{7,10}($|\D)'

Kalau tidak, ekspresi Anda baik-baik saja dan berfungsi untuk saya di PostgreSQL 9.1.4. Seharusnya tidak ada bedanya apakah Anda menggunakannya dalam WHERE klausa atau dalam SELECT list - kecuali jika Anda mengalami bug dengan beberapa versi lama (seperti yang disarankan @kgrittn di komentar).

Jika saya menambahkan string literal dengan E , saya dapat memprovokasi pesan kesalahan yang Anda dapatkan. Ini tidak bisa jelaskan masalah Anda, karena Anda menyatakan bahwa ekspresi berfungsi dengan baik sebagai SELECT barang.

Namun, seperti dikutip Sherlock Holmes, "ketika Anda telah mengesampingkan hal yang tidak mungkin, apapun yang tersisa, betapapun tidak mungkinnya, pastilah kebenarannya."

Mungkin Anda menjalankan satu tes dengan standard_conforming_strings = on dan yang lainnya dengan standard_conforming_strings = off - ini adalah interpretasi default string literal di versi lama sebelum 9.1. Mungkin dengan dua klien yang berbeda (yang memiliki pengaturan berbeda untuk itu).

Baca selengkapnya di bab Konstanta String dengan Escapes gaya-C dalam manual.




  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 UPDATE dan PILIH secara bersamaan

  2. Lakukan kueri jam operasi ini di PostgreSQL

  3. Kesalahan PostGres Saat Menggunakan Distinct :postgres ERROR:tidak dapat mengidentifikasi operator pemesanan untuk jenis catatan

  4. Bagaimana cara mengubah database ke postgresql dengan Symfony 2.0?

  5. Mengisi kolom Many2many (odoo 8)