Я хочу создать поисковый запрос MySQL, который будет искать почтовые индексы, вот что я сделал до сих пор
SELECT * FROM orders where ( InvoicePostcode LIKE 'b%' OR InvoicePostcode LIKE 'ws%') order by InvoiceNumber asc
Я хочу отображать только почтовый индекс, начинающийся с b или ws, но проблема в том, что некоторые сообщения содержат bb или BS в начале почтового индекса, например
BS24 8EE
BB9 8SY
единственные, которые должны показывать, что начинаются с b, как этот, B65 0NQ, я не уверен, как проверить почтовый индекс, только посмотрев на букву в начале перед цифрами в почтовом индексе.
Вы можете попытаться использовать регулярное выражение, чтобы исключить определенный шаблон:
Ниже я исключаю InvoicePostcode, содержащий B, за которым следует буква
SELECT * FROM orders
WHERE (InvoicePostcode LIKE 'b%' AND NOT InvoicePostcode RLIKE '^(B[A-Z])')
OR (InvoicePostcode LIKE 'ws%' AND NOT InvoicePostcode RLIKE '^(WS[A-Z])')
ORDER BY InvoiceNumber ASC
Ты можешь использовать сопоставление с образцом решить эту проблему.
Что вам нужно знать, так это шаблон, который вы ищете, чтобы дать вам пример, если вы ищете все почтовые индексы, начиная с B, только тогда вы знаете, что эти почтовые индексы будут
Точно так же вы можете сделать для всех других моделей.
Вы можете использовать предложение REGEXP для того же.
Например.:
выберите * из заказов, где (InvoicePostcode REGEXP ‘^ B [^ BS].‘ИЛИ InvoicePostcode REGEXP’ ^ WS.«)
‘^ B [^ BS]. *’ В этом он будет игнорировать слова, начинающиеся с BB ИЛИ BS.
Надеюсь, это поможет вам.
SELECT * FROM orders
WHERE (InvoicePostcode LIKE 'b%' AND NOT InvoicePostcode RLIKE '^(B[A-Z])')
OR (InvoicePostcode LIKE 'ws%' AND NOT InvoicePostcode RLIKE '^(WS[A-Z])')
ORDER BY InvoiceNumber ASC
пожалуйста, обратитесь: https://www.guru99.com/regular-expressions.html
Оператор RLIKE выполняет сопоставление шаблона строкового выражения с шаблоном. Шаблон предоставляется в качестве аргумента. Следующая инструкция MySQL найдет имя автора, начинающееся с буквы «B». Символ «^» использовался для соответствия началу имени.
SELECT * FROM orders WHERE InvoicePostcode RLIKE '^B';
[A-Z]
Соответствует любой заглавной букве
[A-Z]
Соответствует любой строчной букве
«^ (B [A-Z])» означает, что он будет работать как первая буква B, а следующий — от A до Z — нет.