2014-01-23 3 views
0

Можно ли выбрать запись базы данных на основе некоторых первых символов строки, соответствующих «диапазону» в столбце с MySQL?Выбор диапазона MySQL с помощью подстановочных знаков

Я попытаюсь сделать это более ясным на примере: Мне нужно выбрать запись базы данных, сопоставив zipcode, но мы получили zipcodes из другой системы в «диапазонах», например, 100-128. Почтовый индекс 10001 (Нью-Йорк) должен соответствовать этой записи. Первые 3 цифры zipcode должны соответствовать 100 или 128, или что-либо между ними (101, 102, ... 126, 127).

Итак, записи в базе данных похожи на 050-051, 144-146, 245-253 и т. Д., Которые мне нужно сопоставить с полным zipcode.

Возможно ли выбрать эту запись с запросом?

Любая помощь приветствуется!

Edit: Я постараюсь сделать его более ясным:

У меня есть только один почтовый индекс, введенный пользователем, например, 10001 (Нью-Йорк).

Теперь я хочу получить все записи моей таблицы информации о доставке, которые соответствуют диапазону (100-128).

Пользователь почтовый индекс: 07200, получать данные с диапазоном: 064-089

Пользователь почтовый индекс: 33101, получать данные с диапазоном: 330-334

И так далее.

Моя доставка Информация таблица имеет следующие столбцы:

ID, country_id, zip_range, цена

+0

Что относительно [MySql Regex] (http://dev.mysql.com/doc/refman/5.5/ru/regexp.html)? Например. '... WHERE my_col RLIKE '^ 1 ([01] [0-9] | 2 [0-8])'' –

+0

Как бы вы автоматизировали превращение строки, такой как '100-128', в это регулярное выражение? И как бы вы это сделали в SQL? – Barmar

ответ

1

Используйте SUBSTRING_INDEX расколоть диапазоны друг от друга в начале и в конце. Затем сопоставьте zipcodes, чьи первые три символа находятся в этом диапазоне с BETWEEN.

SELECT * 
FROM shippingInfo 
WHERE LEFT(:zipcode, 3) BETWEEN SUBSTRING_INDEX(ziprange, '-', 1) AND SUBSTRING_INDEX(ziprange, '-', -1); 

:zipcode является заполнителем, который получает пользователем введенный почтовый индекс.

+0

Этот ответ близок, но не совсем то, что я ищу. Я не присоединяюсь ни к каким таблицам, у меня есть только одна таблица, в которой есть информация о доставке (с такими столбцами, как ziprange, price, country). Кажется, я не могу заставить это работать. –

+0

Где полные zipcodes, с которыми вы согласны? Я думаю, вам нужно обновить свой вопрос более подробно. Покажите образец таблицы и то, что вы пытаетесь получить в результате. – Barmar

+0

Я только что обновил главный вопрос! –

Смежные вопросы