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

含前导零IP地址的SQL精准查询问题求助

解决IP地址前导零的精准匹配问题

我明白你遇到的痛点:数据库里的IP有的带前导零(比如012.12.012.12),有的不带(12.12.12.12),想用模糊查询匹配所有四段是12或012的IP,但要么误匹配,要么查不到结果。下面给你几个靠谱的解决方案:

方案1:用正则表达式(最简洁高效)

正则能精准控制每个IP段的匹配规则,直接指定每个段要么是12,要么是012,同时确保整个IP严格符合四段格式:

MySQL/MariaDB 写法:

WHERE ip REGEXP '^(0?12)\\.(0?12)\\.(0?12)\\.(0?12)$'
  • ^和$锁定字符串首尾,避免匹配到类似112.012.112.012这种包含12但不是纯段的IP
  • 0?12表示“可选的1个0,加上必有的12”,完美覆盖12和012两种情况
  • \\.是转义后的点,因为正则里.默认匹配任意字符,必须转义才能匹配IP里的分隔点

PostgreSQL 写法:

WHERE ip ~ '^(0?12)\.(0?12)\.(0?12)\.(0?12)$'

SQL Server 写法(2016+支持正则):

WHERE ip REGEXP '^(0?12)\.(0?12)\.(0?12)\.(0?12)$'

如果是旧版SQL Server,也可以用通配符写法:

WHERE ip LIKE '[0]?12.[0]?12.[0]?12.[0]?12'

方案2:用LIKE枚举所有可能(兼容性拉满)

如果你的数据库不支持正则,也可以直接枚举所有符合条件的IP组合,虽然繁琐但绝对不会出错:

WHERE ip IN (
    '12.12.12.12',
    '012.12.12.12',
    '12.012.12.12',
    '12.12.012.12',
    '12.12.12.012',
    '012.012.12.12',
    '012.12.012.12',
    '012.12.12.012',
    '12.012.012.12',
    '12.012.12.012',
    '12.12.012.012',
    '012.012.012.12',
    '012.012.12.012',
    '012.12.012.012',
    '012.012.012.012'
)

为什么你的原有方法行不通?

  • 第一个查询 WHERE ip LIKE '%12.%12.%12.%.12':%会匹配任意字符,包括112里的前缀1,所以会误匹配112.012.112.012这种不符合要求的IP。
  • 第二个查询 WHERE ip LIKE '[0]%12.[0]%12.[0]%12.[0]%.12':[0]%12的意思是“一个0,后面跟任意字符,再跟12”,这不仅要求每个段必须以0开头,还允许0和12之间有其他字符(比如0abc12),同时完全排除了不带前导零的12段,自然查不到结果。

内容的提问来源于stack exchange,提问作者MacNean Tyrrell

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:23:26