我在两个不同的表格中有一个电话号码字段。我想比较最小长度的两个最正确的字符。在PostgreSQL中,这种方法比另一种更有效吗?
这里有一些伪代码可以更好地描述这个问题:
SELECT *
FROM Contacts c
JOIN Users u
ON compareFromRight( c.phone, u.phone, LEAST( length( c.phone ), length( u.phone ) ) );
我有一个7位数的索引,我用它来减少事情,但是一旦我到达那个小集合,我需要比较两个原始数字中的尽可能多。最小可比长度因行而异。
感谢。
这是另一个我认为效果不佳的例子:
SELECT *
FROM Contacts c
JOIN Users u ON RIGHT( c.phone, LEAST( LENGTH( c.phone ), LENGTH( u.phone ) ) )
= RIGHT( u.phone, LEAST( LENGTH( c.phone ), LENGTH( u.phone ) ) )
答案 0 :(得分:0)
您可以使用LIKE
:
SELECT c.Phone AS ContactPhone, u.Phone AS UserPhone
FROM Contacts c
JOIN Users u
ON u.phone LIKE '%' || c.Phone
OR c.Phone LIKE '%' || u.Phone;
<强> Example on SQL Fiddle 强>
虽然可能比问题中的效率更高,但它仍然不太可能在大量数据上表现良好。