MySQL单查询实现英国邮编前缀按首2字符条件过滤取唯一值
用单条MySQL语句提取唯一英国邮编前缀(Outcode)
你可以通过CASE WHEN或IF函数结合DISTINCT,在单条语句里实现动态截取并去重的需求,替代原来的两个单独查询。
方案1:使用CASE WHEN(可读性更强)
SELECT DISTINCT CASE -- 判断第二个字符是否为数字,是则取第一个字符作为前缀 WHEN SUBSTRING(outcode, 2, 1) REGEXP '^[0-9]$' THEN SUBSTRING(outcode, 1, 1) -- 否则取前两个字符作为前缀 ELSE SUBSTRING(outcode, 1, 2) END AS outcode_prefix FROM outcodepostcodes;
方案2:使用IF函数(更简洁)
SELECT DISTINCT IF( SUBSTRING(outcode, 2, 1) REGEXP '^[0-9]$', SUBSTRING(outcode, 1, 1), SUBSTRING(outcode, 1, 2) ) AS outcode_prefix FROM outcodepostcodes;
说明
- 用
REGEXP '^[0-9]$'判断第二个字符是否为数字,比SUBSTRING(...) *1 >0的方式更直观准确,避免非数字字符转数值时的隐含转换问题。 DISTINCT会对整个条件判断后的结果去重,直接得到唯一的邮编前缀集合。- 两种方案逻辑完全一致,只是语法形式不同,可根据个人习惯选择。
内容的提问来源于stack exchange,提问作者Keith Ivison
相关产品推荐
相关产品推荐

