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

Bagaimana cara mendapatkan posisi kecocokan regexp dalam string di PostgreSQL?

Salah satu cara (dari banyak) untuk melakukan ini:Lepaskan sisa string yang dimulai dari kecocokan dan ukur panjang string yang terpotong:

SELECT id, title
FROM   book
WHERE  title ILIKE '%deep%space%'
ORDER  BY length(regexp_replace(title, 'deep.*space.*', '','i'));

Menggunakan ILIKE dalam klausa WHERE, karena itu biasanya lebih cepat (dan melakukan hal yang sama di sini).
Perhatikan juga parameter keempat ke regexp_replace() fungsi ('i' ), untuk membuatnya tidak peka huruf besar/kecil.

Alternatif

Sesuai permintaan di komentar.
Sekaligus mendemonstrasikan cara mengurutkan kecocokan pertama (dan NULLS LAST ).

SELECT id, title
      ,substring(title FROM '(?i)(^.*)deep.*space.*') AS sub1
      ,length(substring(title FROM '(?i)(^.*)deep.*space.*')) AS pos1

      ,substring(title FROM '(?i)^.*(?=deep.*space.*)') AS sub2
      ,length(substring(title FROM '(?i)^.*(?=deep.*space.*)')) AS pos2

      ,substring(title FROM '(?i)^.*(deep.*space.*)') AS sub3
      ,position((substring(title FROM '(?i)^.*(deep.*space.*)')) IN title) AS p3

      ,regexp_replace(title, 'deep.*space.*', '','i') AS reg4
      ,length(regexp_replace(title, 'deep.*space.*', '','i')) AS pos4
FROM   book
ORDER  BY title ILIKE '%deep%space%' DESC NULLS LAST
         ,length(regexp_replace(title, 'deep.*space.*', '','i'));

Anda dapat menemukan dokumentasi untuk semua hal di atas dalam manual di sini dan di sini .

-> SQLfiddle mendemonstrasikan semuanya.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengapa JSON null tidak dilemparkan ke SQL null di postgres?

  2. Tidak dapat menjalankan blok di PostgreSQL 8.2

  3. Postgres:Cara terbaik untuk memindahkan data dari skema publik satu DB ke skema baru DB lain

  4. Memanfaatkan Enkripsi untuk Memperkuat Keamanan Database PostgreSQL

  5. Dapatkan n kategori yang dikelompokkan dan jumlahkan yang lain menjadi satu