Mysql 搜索邮政编码

Mysql Search Postcodes

我想创建一个 mysql 搜索查询,它将搜索 post代码 这是我目前所做的

SELECT * FROM orders where ( InvoicePostcode LIKE 'b%' OR InvoicePostcode LIKE 'ws%') order by InvoiceNumber asc

我只想显示以 b 或 ws 开头的 post 代码,但问题是一些 post 在 post 代码的开头包含 bb 或 BS 例如

BS24 8EE

BB9 8SY

唯一应该显示的以 b 开头的像这样的 B65 0NQ 我不确定如何通过只查看 [=20 中数字之前开头的字母来检查 post 代码=]代码

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

你需要知道的是你正在搜索的模式,举个例子,如果你正在搜索所有以 B 开头的邮政编码,那么你就知道这些邮政编码会

  1. 必须有第一个字符为 B。在 link 到 select 中有示例第一个字符 (^) 和 1 个实例({1} 等于 'B' 或 'b'.
  2. 第二个字符可以是任意数字

同样,您也可以对所有其他模式执行此操作。

您可以尝试使用正则表达式来排除某些模式:

在下面,我排除了包含 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

您可以使用 REGEXP 子句。

例如: select * 来自订单,其中 (InvoicePostcode REGEXP '^B[^BS].' OR 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 则不是。