我想创建一个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我不知道如何只通过查看邮政编码中数字之前的字母来检查邮政编码
答案 0 :(得分:0)
您可以使用pattern matching来解决此问题。
您需要了解的是您要搜索的模式,如果您要搜索以B开头的所有邮政编码,只要您知道这些邮政编码将
,就会举例说明同样,你也可以为所有其他模式做。
答案 1 :(得分:0)
您可以尝试使用regexp排除某些模式:
在下面我排除包含B后跟一个字母
的InvoicePostcodeSELECT * 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不是。