You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 10:07:17