postgres найти почтовые индексы рядом с определенным почтовым индексом

Предполагая таблицу 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, затем используя тригонометрию для вычисления расстояния между почтовыми индексами. Взгляните на ссылку. Я уверен, что это поможет вам …

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