Mysql搜索邮政编码

时间:2017-11-23 10:40:35

标签: php mysql search postal-code

我想创建一个mysql搜索查询,这里将搜索postcodes到目前为止我所做的

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我不知道如何只通过查看邮政编码中数字之前的字母来检查邮政编码

4 个答案:

答案 0 :(得分:0)

您可以使用pattern matching来解决此问题。

您需要了解的是您要搜索的模式,如果您要搜索以B开头的所有邮政编码,只要您知道这些邮政编码将

,就会举例说明
  1. 必须有第一个字符为B.链接中有一些例子可以选择第一个字符(^)和一个实例({1}等于'B'或'b'。
  2. 第二个字符可以是任意数字
  3. 同样,你也可以为所有其他模式做。

答案 1 :(得分:0)

您可以尝试使用regexp排除某些模式:

在下面我排除包含B后跟一个字母

的InvoicePostcode
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

答案 2 :(得分:0)

您可以使用相同的REGEXP子句。

例如为: 从订单中选择*(InvoicePostcode REGEXP'^ B [^ BS]。'或InvoicePostcode REGEXP'^ WS。')

'^ B [^ BS]。*'在此将忽略以BB OR BS开头的单词。

希望它能帮到你。

答案 3 :(得分:0)

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不是。