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

Temukan kemungkinan duplikat dalam dua kolom dengan mengabaikan huruf besar dan karakter khusus

lower() / upper()

Gunakan salah satunya untuk melipat karakter menjadi huruf kecil atau huruf besar. Karakter khusus tidak terpengaruh:

SELECT count(*), lower(name), number
FROM   tbl
GROUP  BY lower(name), number
HAVING count(*) > 1;

unaccent()

Jika Anda benar-benar ingin mengabaikan tanda diakritik, seperti yang tersirat dalam komentar Anda, instal modul tambahan unaccent , yang menyediakan kamus pencarian teks yang menghilangkan aksen dan juga fungsi tujuan umum unaccent() :

CREATE EXTENSION unaccent;

Membuatnya sangat sederhana:

SELECT lower(unaccent('Büßercafé'));

Hasil:

busercafe

Ini tidak menghapus non-huruf. Tambahkan regexp_replace() seperti @Craig disebutkan untuk itu:

SELECT lower(unaccent(regexp_replace('$s^o&f!t Büßercafé', '\W', '', 'g') ));

Hasil:

softbusercafe

Anda bahkan dapat membuat indeks fungsional di atasnya:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Relasi yang diteruskan ke #atau harus kompatibel secara struktural. Nilai yang tidak kompatibel:[:references]

  2. Trade-off dalam Penerapan Hot Standby

  3. PHP dan Basis Data:Tampilan, Fungsi, dan Kinerja Prosedur Tersimpan

  4. SQL:Mengontrol berapa banyak catatan yang dikembalikan

  5. JBoss7 + PostgreSQL Ketergantungan baru yang hilang/tidak memuaskan