tgoop.com/sqlhub/1987
Last Update:
ΠΠ½ΠΎΠ³Π΄Π° Π½ΡΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ ΠΏΠ°ΡΡ ΡΡΡΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΡΡΠΈ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ β Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΠ·-Π·Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΊΠΈ Π² ΠΎΠ΄Π½ΠΎΠΉ Π±ΡΠΊΠ²Π΅. Π’Π°ΠΊΠΎΠΉ ΠΊΠ΅ΠΉΡ ΡΠ°ΡΡΠΎ Π²ΡΡΡΠ΅ΡΠ°Π΅ΡΡΡ ΠΏΡΠΈ ΠΏΠΎΠΈΡΠΊΠ΅ Π΄ΡΠ±Π»Π΅ΠΉ Π² ΠΈΠΌΠ΅Π½Π°Ρ
, email ΠΈΠ»ΠΈ ΡΠΎΠ²Π°ΡΠ°Ρ
.
Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ levenshtein()
ΠΈΠ· ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ pg_trgm
Π² PostgreSQL, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡ ΡΡΡΠΎΠΊΠΈ, ΠΎΡΠ»ΠΈΡΠ°ΡΡΠΈΠ΅ΡΡ ΡΠΎΠ²Π½ΠΎ Π½Π° 1 ΡΠΈΠΌΠ²ΠΎΠ». ΠΡΠΎ ΡΠ΄ΠΎΠ±Π½ΠΎ Π΄Π»Ρ ΠΎΡΠΈΡΡΠΊΠΈ Π΄Π°Π½Π½ΡΡ
, ΠΏΠΎΠΈΡΠΊΠ° Π΄ΡΠ±Π»Π΅ΠΉ ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ "ΡΠΌΠ½ΠΎΠ³ΠΎ" ΠΏΠΎΠΈΡΠΊΠ° Π² ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ΅.
-- Π£Π±Π΅Π΄ΠΈΡΡ, ΡΡΠΎ pg_trgm ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΎ
CREATE EXTENSION IF NOT EXISTS pg_trgm;
-- ΠΠ°ΠΉΠ΄ΡΠΌ ΡΡΡΠΎΠΊΠΈ ΠΈΠ· ΡΠ°Π±Π»ΠΈΡΡ users, Ρ ΠΊΠΎΡΠΎΡΡΡ name ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ Π½Π° 1 ΡΠΈΠΌΠ²ΠΎΠ»
SELECT a.name AS name1, b.name AS name2
FROM users a
JOIN users b ON a.id < b.id
WHERE levenshtein(a.name, b.name) = 1;
-- ΠΡΠΈΠΌΠ΅Ρ: Π½Π°ΠΉΠ΄ΡΡ ΠΏΠ°ΡΡ Π²ΡΠΎΠ΄Π΅ ('Anna', 'Anya') ΠΈΠ»ΠΈ ('John', 'Joan')
πΠΠΎΠ»ΡΡΠ΅ Π²ΠΈΠ΄Π΅ΠΎ
@sqlhub