【问题标题】:postgres find zip codes near specific zip codepostgres 查找特定邮政编码附近的邮政编码
【发布时间】:2012-01-10 17:39:00
【问题描述】:

假设一个包含zipvarchar(10) 的Postgres 表我想获得与特定zip 匹配的所有结果,或者使用接近查询的条目来扩展我的结果,以防没有足够的结果。说:

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

有什么建议吗?

【问题讨论】:

    标签: sql postgresql matching zipcode


    【解决方案1】:

    ORDER BY 与所需zip 的差值?

    【讨论】:

    • @HannesMaack,实际上,它仍然归结为从 0 开始按距离排序。问题只是如何你计算这个“距离”。
    【解决方案2】:

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

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

    【讨论】:

    • 嘿Shadowman,我不确定我是否真的需要包含纬度/经度的表格,但我的问题是一个很好的解决方案...谢谢
    • 如果您要计算邮政编码之间的距离,那么这是最好的方法。如果您只想获取与您正在搜索的邮政编码“相似”的邮政编码,那么这可能是矫枉过正。
    • 上面的链接现在已损坏。不过,这是一种可能的选择:Implementing Zip Code Proximity Functions in MySQL and PostgreSQL
    【解决方案3】:

    你可能想要这样的东西:

    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), '%')
    

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

    【讨论】:

      最近更新 更多