Postgres Найти почтовые индексы вблизи конкретного почтового индекса

StackOverflow https://stackoverflow.com/questions/8343673

Вопрос

Предполагая таблицу 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/

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top