比较两个字段之间最小最右边字符的最快方法是什么

时间:2013-11-18 22:18:34

标签: sql postgresql

我在两个不同的表格中有一个电话号码字段。我想比较最小长度的两个最正确的字符。在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 ) ) )

1 个答案:

答案 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

虽然可能比问题中的效率更高,但它仍然不太可能在大量数据上表现良好。