提问者:小点点

使用SQL查询查找包含伦敦邮政编码的所有行


有没有一种方法可以使用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个伦敦外围邮政编码区)构成伦敦邮政区的外围区

内部和外部区域一起构成伦敦邮政区


共1个答案

匿名用户

这样做的一种方法是利用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这样的字符串是有效的)。

顺便说一句,我不太确定这在规模上对您的特定数据集的性能如何,但是如果这是一个一次性的练习,那么它应该很好地满足您的需要。