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

Temukan baris di mana array teks berisi nilai yang mirip dengan input

Penting juga untuk dipahami bahwa ANY adalah bukan seorang operator tetapi konstruksi SQL yang hanya dapat digunakan di kanan dari seorang operator. Selengkapnya:

  • Bagaimana cara menggunakan ANY daripada IN dalam klausa WHERE dengan Rails?

LIKE operator - atau lebih tepatnya:ekspresi , yang ditulis ulang dengan ~~ operator di Postgres secara internal - mengharapkan nilai ke kiri dan pola ke kanan. Tidak ada COMMUTATOR untuk operator ini (seperti ada untuk operator persamaan sederhana = ) sehingga Postgres tidak dapat membalik operan.

Upaya Anda:

select * from someTable where '%someInput%' LIKE ANY(someColum);

telah membalik operan kiri dan kanan jadi '%someInput%' adalah nilai dan elemen kolom larik someColum dianggap sebagai pola (yang bukan yang Anda inginkan).

Itu akan harus ANY(someColum) LIKE '%someInput%' - kecuali itu tidak mungkin dengan ANY konstruksi yang hanya diperbolehkan ke kanan dari seorang operator. Anda menabrak penghalang jalan di sini.

Terkait:

  • Apakah ada cara untuk mengindeks kolom teks yang berisi pola ekspresi reguler?
  • Dapatkah PostgreSQL mengindeks kolom array?

Anda dapat menormalkan desain relasional dan menyimpan elemen dari array di baris terpisah dalam tabel terpisah. Kecuali itu, unnest() adalah solusinya, seperti yang sudah Anda temukan sendiri. Tetapi sementara Anda hanya tertarik pada keberadaan setidaknya satu elemen yang cocok, sebuah EXISTS subquery akan paling efisien sambil menghindari duplikat dalam hasil - Postgres dapat menghentikan pencarian segera setelah kecocokan pertama ditemukan:

SELECT *
FROM   tbl
WHERE  EXISTS (
    SELECT -- can be empty 
    FROM   unnest(someColum) elem
    WHERE  elem LIKE '%someInput%'
  );

Anda mungkin ingin keluar dari karakter khusus di someInput . Lihat:

  • Fungsi Escape untuk ekspresi reguler atau pola LIKE

Hati-hati dengan negasi (NOT LIKE ALL (...) ) ketika NULL dapat terlibat:

  • Periksa apakah NULL ada di array 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. PostgreSQL:peran tidak diizinkan untuk masuk

  2. Apa perbedaan antara `->>` dan `->` di Postgres SQL?

  3. Cara Mengelompokkan Odoo 12 dengan Replikasi Streaming PostgreSQL untuk Ketersediaan Tinggi

  4. Apakah mungkin untuk menentukan skema saat menghubungkan ke postgres dengan JDBC?

  5. Tabel Postgresql ada, tetapi mendapatkan relasi tidak ada saat melakukan kueri