Postgres Найти почтовые индексы вблизи конкретного почтового индекса
-
27-10-2019 - |
Вопрос
Предполагая таблицу Postgres, содержащая zip
в качестве varchar(10)
Я хочу получить либо все результаты, соответствующие конкретному ZIP, или расширить свои результаты с помощью записей, близких к запрошению, на случай, если результатов недостаточно. Сказать:
Пользователь ищет zip
«56500», и мой набор результатов возвращает 2 элемента с точным совпадением. В этом случае я хочу выполнить своего рода like
Запрос, который находит записи «565%». В конце концов мне нужно запустить это в одном запросе.
Какие-либо предложения?
Решение
Что -то вроде этого может быть тем, что вы хотите:
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), '%')
Это может быть не самое эффективное решение, но, по крайней мере, это единственный запрос, так что может преуспеть в качестве отправной точки.
Другие советы
ORDER BY
Дельта из желаемого zip
?
Таким образом, это не специально для PostgreSQL - это было фактически написано для MySQL изначально - но это должно работать. Я наткнулся на эту статью некоторое время назад, которая показала, как создать базу данных, содержащую Zipcodes и широту/долготу для каждого ZipCode, а затем с использованием тригонометрии для расчета расстояния между Zip -кодами. Взгляните на ссылку. Я уверен, что это поможет вам ...
http://www.chrissibert.com/blog/2009/06/16/mysql-zip-codes-latitude-longitude-distance/