有没有一种方法可以使用SQL查询找到所有运往伦敦的订单? 简单地在栏中搜索London是行不通的,因为有些客户把地区名称而不是“London”放进去了。
所以我想最好的办法是通过邮政编码。 这是寻找行的最好方法吗? 并继续对每个邮政编码使用OR语句?
select * from tt_order_data
where ship_postcode like "e1%"
根据wiki,这是邮政编码范围:
E,EC,N,NW,SE,SW,W和WC邮政编码区(八个伦敦邮政区)构成伦敦邮政区的内部区域,与伦敦邮政镇相对应。
BR,CR,DA,EN,HA,IG,SL,TN,KT,RM,SM,TW,UB,WD和CM(14个伦敦外围邮政编码区)构成伦敦邮政区的外围区
内部和外部区域一起构成伦敦邮政区
这样做的一种方法是利用regexp
并定义一个模式,该模式只匹配以上述伦敦邮政编码字符序列之一开头的ship_postcode
:
SELECT *
FROM tt_order_data
WHERE UPPER(TRIM(ship_postcode)) REGEXP '^(E|EC|N|NW|SE|SW|W|WC|BR|CR|DA|EN|HA|IG|SL|TN|KT|RM|SM|TW|UB|WD|CM)'
DB Fiddle Regex101
重要的是要记住,如果没有正确控制输入,您仍然需要执行一定数量的数据清理,因为无效的邮政编码将匹配此筛选器(例如,E1 7AA
是有效的,但是此筛选器也会认为ergo
这样的字符串是有效的)。
顺便说一句,我不太确定这在规模上对您的特定数据集的性能如何,但是如果这是一个一次性的练习,那么它应该很好地满足您的需要。