postgres在特定邮政编码附近找到邮政编码

时间:2011-12-01 15:17:51

标签: sql postgresql matching zipcode

假设包含zipvarchar(10)的Postgres表我希望获得与特定zip匹配的所有结果,或者将结果扩展到接近查询的条目,以防结果不够。说:

用户搜索zip“56500”,我的结果集返回2个运行完全匹配的项目。在这种情况下,我想执行一种查找“565%”条目的like查询。最终我需要在一个查询中运行它。

有什么建议吗?

3 个答案:

答案 0 :(得分:0)

ORDER BY来自所需zip的差异?

答案 1 :(得分:0)

所以,这不是专门针对PostgreSQL的 - 它实际上是为MySQL编写的 - 但它应该可行。我前面看过这篇文章,展示了如何为每个邮政编码创建一个包含zipcodes和纬度/经度的数据库,然后使用三角函数计算邮政编码之间的距离。看看链接。我相信它会对你有帮助......

http://www.chrissibert.com/blog/2009/06/16/mysql-zip-codes-latitude-longitude-distance/

答案 2 :(得分:0)

这样的事情可能就是你想要的:

SELECT …
FROM atable
WHERE zip = @zip

UNION ALL

SELECT …
FROM atable
WHERE NOT EXISTS (
  SELECT *
  FROM atable
  WHERE zip = @zip
)
  AND zip LIKE CONCAT(LEFT(@zip, 3), '%')

这可能不是最有效的解决方案,但至少它只是一个查询,所以可能作为一个起点。