2011-04-03 57 views
2

我在表“OG”中有一列“名称”和“ids”,并且希望找到最后一个字母不同且总编辑距离为两个的那些名称。到目前为止,我有:设置一个字符串的最后一个字母等于PostgreSQL

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 

不幸的是,这并不能确保最后的字母是不同的。任何想法修复?

回答

2

检查最后一个字符,以及:

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)将失败时字符串为空(NOT NULL)

+0

超爽!谢谢! – 2011-04-03 21:55:41

相关问题