[Примечание: Вопрос был отредактирован другой вопрос, а я отвечал]
Вы очень близки. Есть несколько небольших недостатков. Но, к сожалению, это никогда не сработает.
Предположительно вы хотите, чтобы соответствовать «123 Main St» и «123 Main St», так что вам нужно сделать дело матч бесчувственно. Вы можете добиться этого, используя lower()
на address
и убедившись, что все буквы в вашем матче также строчные.
lower(address) like '%main st%'
Тогда есть проблема почтовый индекс. Прямо сейчас вы соглашаетесь с чем-то, у кого есть 142. Вам нужны только вещи, которые начинают с 142, вы не хотите 12142 или 31429. Так что добавьте пробел в начало вашего матча.
address like '% 142%'
Поиск по названию улицы также может использовать эту обработку, чтобы избежать сбора «Жермен-стрит».
Собираем все вместе ...
SELECT *
FROM customer
WHERE lower(address) like '% main st%' AND
address like '% 142%';
Это работает только в определенной степени. Например, он заберет 123 Main St Apt 142, NY, NY 10005
, потому что он просто ищет номер 142. Или что, если они используют запятую вместо пространства для отделения почтового индекса от состояния? 123 Main St,NY,NY,14205
Тогда вы не будете соответствовать почтовому индексу.
Если вы используете базу данных, которая поддерживает регулярные выражения, вы можете улучшить соответствие некоторым, но это никогда не будет на 100%. И чем сложнее ваше соответствие, тем меньше вероятность того, что база данных сможет использовать индексы, ей придется выполнять полное сканирование таблицы каждый раз.
Чтобы решить проблему, вам придется предварительно разобрать свои адреса, разбить их на свои компоненты и сохранить их. Это сложная и сложная проблема. К счастью, для этого существует множество библиотек, но это зависит от языка, который вы используете. Это другой вопрос.
Вы сохраняете почтовый индекс в том же поле для адреса улицы? Это звучит как плохой дизайн базы данных, если вы храните их все в одном поле. – Siyual
Является ли ваш 'ex' примером всех строк? Или это строки, которые вы хотите? Потому что у второго нет zip, который начинается с 142. – Schwern
Если вам нужно запросить zip, введите его в свой собственный столбец. –