SQL Server МЕЖДУ проблемой - PullRequest
0 голосов
/ 20 июля 2009

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

Таблица почтовых индексов:

FROM-CODE   TO-CODE    CONTACT-ID    COUNTRY-CODE
12000       12999      18            fr
BT000000    BT9ZZZZZ   34            uk
...

Чтобы найти контакт в определенном диапазоне, например, диапазон начиная с 123, я использую следующий запрос:

select * from postcode-range <br /> where '123' between from-code and to-code <br /> and country-code = 'fr'

Это вернет первую запись, идентификатор контакта 18.

Проблема в том, что если я ищу '120' или '12' Я не получаю результатов.

Есть идеи, что здесь не так? У кого-нибудь есть альтернативный SQL-запрос?

Ответы [ 3 ]

4 голосов
/ 20 июля 2009

'12 '<' 120 '<' 12000 '</p>

Если вы измените свои коды с и на «12» и «12999» для «fr», ваш запрос в письменном виде будет работать, хотя он будет включать такие шаблоны, как «121AB», который предположительно не является допустимым французским почтовым индексом , Вы можете включить другую проверку, например, проверку того, что строка содержит только числа или ее длину.

например. делаем

like '12[0-9][0-9][0-9]'
1 голос
/ 20 июля 2009

Я нашел это решение:

select * from postcode-range
where country-code = 'fr' 
and left('12' + '00000000000000', len(from-code)) between from-code and to-code

Если запрос короче требуемой длины почтовых индексов, пропущенные символы заполняются нулями. Я просто предполагаю, что ни один почтовый индекс не длиннее 14 символов.

Код страны и запрос (здесь '12' ) являются просто заполнителями.

0 голосов
/ 20 июля 2009

Вы можете использовать как "12%"
или используйте lpad, чтобы получить первые 3 символа.

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