Установите последние буквы строки равными PostgreSQL - PullRequest
2 голосов
/ 04 апреля 2011

У меня есть столбец «имена» и «идентификаторы» в таблице «OG», и я хочу найти те имена, где последняя буква отличается, а общее расстояние редактирования равно двум.Пока что у меня есть:

SELECT
z1.names as names1, z2.names as names2, z1.ids, z2.ids
FROM (SELECT t.names, SUBSTRING(t.names for Length(t.names-1) AS newnames
from "OG" t) z1, (SELECT r.names, SUBSTRING(r.names for Length(r.names-1) AS
newnames1 FROM "OG" r) z2
WHERE levenshtein(z1.newnames, z2.newnames1) = 2 AND z1.id != z2.id

К сожалению, это не гарантирует, что последние буквы различны.Любые идеи для исправления?

1 Ответ

2 голосов
/ 04 апреля 2011

Проверьте также последние символы:

WHERE levenshtein(z1.newnames, z2.newnames1) = 2 AND z1.id != z2.id
AND substring(z1.names,Length(z1.names)) <> substring(z2.names,Length(z2.names))

Обратите внимание, что использование SUBSTRING(t.names for length(t.names)-1) в вашем запросе завершится неудачей, когда строка пуста (не ноль)

...