Почтовый индекс SQL существует в пределах диапазона - PullRequest
1 голос
/ 13 апреля 2011

У меня следующая ситуация:

У меня есть таблица со списком почтовых индексов в формате:

1234 AA (Dutch postcode)

2345 ZF

B-2345 (Belgium postcode)

B-4355

У меня есть другая таблица, которая содержит почтовые индексы:

PostcodeFrom

1000 AF                     
2000 ZF
B-1234

PostcodeTo

1999 ZX
2999 ZF
B-1889

Я ищу решение, как найти значение почтового индекса между несколькими диапазонами.Сначала я думал о

SUBSTRING(MyPostcode,1,4) BETWEEN SUBSTRING(PostcodeFrom,1,4) AND SUBSTRING(PostcodeTo,1,4)

.. но потом все еще существует проблема с персонажами (даже не думая о почтовых индексах Бельгии).

Может ли кто-нибудь мне помочь?

Ваш,


Спасибо за ваш ответ!

Таблица, которую вы нарисовали, требует еще одно поле: RegionCode.

RangeTable:

|RCode |PCodeFrom |PCodeTo |
|001 |1000 ВА |1999 ZZ |
|002 |1000 AA |1999 AZ |

Обратите внимание, что если почтовый индекс 1234 AC, он должен возвращать RegionCode: 002
Чтобы сравнить цифры не сложно, но как сравнивать символы?

У меня была идея сделать таблицу с AA - ZZ, где каждая комбинация имеет определенное значение INT, но я надеюсь, что есть другой, более простой способ.

1 Ответ

2 голосов
/ 13 апреля 2011

Вы можете сделать это только надежно (игнорируя потенциальную un -обеспеченность выполнения такого рода сопоставления диапазонов с почтовыми индексами), разделив части почтового индекса на разные столбцы по типу символов.

Я не знаю много о голландских почтовых индексах, но если ваши форматы правильные, вы можете создать таблицу вроде:

+-------+------+
| code  | city |
+-------+------+
| 1234  | AA   |
+-------+------+

Разделение почтовых индексов позволит вам выполнить более детальную сортировку.

Обновление:

Посмотрев страницу Википедии о голландских почтовых индексах , похоже, это должно работать для всех из них.Мои метки code и city хотя и неточны.

В сторону: я впечатлен тем, что в Нидерландах есть такой нормальный формат почтового индекса, в отличие от британского, где вам нужно огромное регулярное выражение длядаже решить, является ли формат действительным.

Обновление 2:

Ваша проверка будет работать и с символами, но вам будет лучше хранить почтовые индексы в отдельной таблице судостоверение личностиПриведенный выше пример был просто для того, чтобы показать разделение символов от чисел, так что вам действительно нужно:

mysql> select * from postcodes;
+------+-------+-------+
| id   | part1 | part2 |
+------+-------+-------+
|    1 |  1234 | AA    |
|    2 |  5678 | BB    |
+------+-------+-------+

Когда вы сохраняете диапазоны, не храните почтовые индексы вв таблице ranges хранится идентификатор записи в таблице postcodes, например:

mysql> select * from ranges;
+-------------+---------------+-------------+
| region_code | postcode_from | postcode_to |
+-------------+---------------+-------------+
|           1 |             1 |           2 |
+-------------+---------------+-------------+

Эта запись говорит, что «область 1 составляет от 1234 AA до 5678 BB»

ДляНапример, я скажу, что почтовые индексы начинаются с 0001 AA, затем перемещаются к 0001 AB, вплоть до 0001 ZZ, затем 0002 AA и так далее.Это, очевидно, неправильно, но это демонстрирует теорию.Вам нужно заменить это на алгоритм, который вы используете, чтобы определить, как почтовые индексы увеличиваются и уменьшаются.

Когда вы хотите выяснить, "вписывается ли почтовый индекс 3456 XY в область 89?", Вы разделяете его на символи число, и проверьте, соответствуют ли значения диапазону.Используя мой алгоритм, я проверяю:

Числовая часть больше или меньше числовой части postcode_from?

Если она больше, то она меньше числовой части postcode_to?

Если вы удовлетворяете обоим условиям, проверьте буквы - это важный бит - сопоставление набора символов MySQL делает позволяет вам сказать "меньше BC *1047*,вы можете иметь:

WHERE 'AB' < part2;

в вашем предложении WHERE.

Используя этот метод, вы можете определить, какой из ваших регионов имеет начало и конец, которые соответствуют значению, которое вы 'повторное тестирование.

Это немного затянуто, но будет работать без каких-либо преобразований. Возможно, вам придется проверить, что используемая сортировка соответствует тому, как работает последовательность букв для определенного типа почтового индекса, который вы используете.Используем хотя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...