Postgres Encuentra códigos postales cerca del código postal específico
-
27-10-2019 - |
Pregunta
Suponiendo una tabla de postes que contiene zip
como varchar(10)
Quiero obtener todos los resultados que coincidan con una cremallera específica o extender mis resultados con entradas cercanas a la consulta en caso de que no haya suficientes resultados. Decir:
Un usuario busca zip
"56500" y mi conjunto de resultados devuelve 2 elementos con una coincidencia exacta. En este caso quiero realizar una especie de like
consulta que encuentra entradas "565%". Eventualmente necesito ejecutar esto en una consulta.
¿Alguna sugerencia?
Solución
Algo como esto podría ser lo que quieres:
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), '%')
Esta puede no ser la solución más eficiente, pero al menos es una sola consulta, por lo que podría funcionar bien como punto de partida.
Otros consejos
ORDER BY
el delta del deseado zip
?
Entonces, esto no es específicamente para PostgreSQL, en realidad fue escrito para MySQL originalmente, pero debería funcionar. Encontré este artículo hace un tiempo que mostraba cómo crear una base de datos que contenga códigos postales y latitud/longitud para cada código postal, luego usando trigonometría para calcular la distancia entre los códigos postales. Eche un vistazo al enlace. Estoy seguro de que te ayudará ...
http://www.chrissibert.com/blog/2009/06/16/mysql-zip-codes-latitude-longitude-distance/