假设包含zip
为varchar(10)
的Postgres表我希望获得与特定zip匹配的所有结果,或者将结果扩展到接近查询的条目,以防结果不够。说:
用户搜索zip
“56500”,我的结果集返回2个运行完全匹配的项目。在这种情况下,我想执行一种查找“565%”条目的like
查询。最终我需要在一个查询中运行它。
有什么建议吗?
答案 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), '%')
这可能不是最有效的解决方案,但至少它只是一个查询,所以可能作为一个起点。