PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Có một Postgresql Levenshtein đa nhận biết không?

'A' với một dấu phụ là một chuỗi ký tự, tức là sự kết hợp của a và một ký tự kết hợp, dấu phụ ̨:E'a\u0328'

Có một ký tự được viết trước tương đương ą :E'\u0105'

Một giải pháp sẽ là chuẩn hóa các chuỗi Unicode, tức là để chuyển đổi chuỗi ký tự kết hợp thành ký tự được gộp trước trước khi so sánh chúng.

Thật không may, Postgres dường như không có chức năng chuẩn hóa Unicode tích hợp sẵn, nhưng bạn có thể dễ dàng truy cập một chức năng thông qua PL/Perl hoặc PL / Python mở rộng ngôn ngữ.

Ví dụ:

create extension plpythonu;

create or replace function unicode_normalize(str text) returns text as $$
  import unicodedata
  return unicodedata.normalize('NFC', str.decode('UTF-8'))
$$ language plpythonu;

Bây giờ, dưới dạng chuỗi ký tự E'a\u0328' được ánh xạ vào ký tự thành phần sẵn tương đương E'\u0105' bằng cách sử dụng unicode_normalize , khoảng cách levenshtein là đúng:

select levenshtein(unicode_normalize(E'a\u0328'), 'x');
levenshtein
-------------
           1



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. thay đổi kiểu dữ liệu cột từ mảng thành số nguyên

  2. django nhận được tháng kể từ ngày tổng hợp

  3. Duy trì thứ tự của string_agg riêng biệt bên trong

  4. hoảng:sql:mong đợi 1 đối số đích trong Quét, không phải <number> golang, pq, sql

  5. PostgreSQL 9.3:Chia một cột thành nhiều cột