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

Aksen postgres yang tidak sensitif SEPERTI pencarian di Rails 3.1 di Heroku

Solusi orang miskin

Jika Anda dapat membuat fungsi, Anda dapat menggunakan yang ini. Saya menyusun daftarnya mulai di sini dan ditambahkan ke dalamnya dari waktu ke waktu. Ini cukup lengkap. Anda bahkan mungkin ingin menghapus beberapa karakter:

CREATE OR REPLACE FUNCTION lower_unaccent(text)
  RETURNS text AS
$func$
SELECT lower(translate($1
     , '¹²³áàâãäåāăąÀÁÂÃÄÅĀĂĄÆćčç©ĆČÇĐÐèéêёëēĕėęěÈÊËЁĒĔĖĘĚ€ğĞıìíîïìĩīĭÌÍÎÏЇÌĨĪĬłŁńňñŃŇÑòóôõöōŏőøÒÓÔÕÖŌŎŐØŒř®ŘšşșߊŞȘùúûüũūŭůÙÚÛÜŨŪŬŮýÿÝŸžżźŽŻŹ'
     , '123aaaaaaaaaaaaaaaaaaacccccccddeeeeeeeeeeeeeeeeeeeeggiiiiiiiiiiiiiiiiiillnnnnnnooooooooooooooooooorrrsssssssuuuuuuuuuuuuuuuuyyyyzzzzzz'
     ));
$func$ LANGUAGE sql IMMUTABLE;

Permintaan Anda akan berfungsi seperti itu:

find(:all, :conditions => ["lower_unaccent(name) LIKE ?", "%#{search.downcase}%"])

Untuk penelusuran berlabuh kiri, Anda dapat menggunakan indeks pada fungsi untuk sangat hasil cepat:

CREATE INDEX tbl_name_lower_unaccent_idx
  ON fest (lower_unaccent(name) text_pattern_ops);

Untuk pertanyaan seperti:

SELECT * FROM tbl WHERE (lower_unaccent(name)) ~~ 'bob%'

Solusi yang tepat

Di PostgreSQL 9.1+ , dengan hak istimewa yang diperlukan, Anda dapat:

CREATE EXTENSION unaccent;

yang menyediakan fungsi unaccent() , melakukan apa yang Anda butuhkan (kecuali untuk lower() , gunakan saja tambahan itu jika diperlukan). Baca manual tentang ekstensi ini .
Juga tersedia untuk PostgreSQL 9.0 tapi CREATE EXTENSION sintaks baru di 9.1.

Selengkapnya tentang tanpa aksen dan indeks:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Temukan Induk secara Rekursif menggunakan Query

  2. Nilai Default dalam kolom saat menyisipkan baris baru

  3. PostgreSQL salah mengonversi dari stempel waktu tanpa zona waktu ke stempel waktu dengan zona waktu

  4. Cara Merujuk dan Menyimpan Beberapa User_ID ke satu formulir dan tampilan kata Id di indeks / Tampilkan Halaman Aplikasi Rails 4

  5. Kembalikan nilai kolom pra-PERBARUI menggunakan SQL saja