SQL技术问询:如何识别同一列中无对应7位等效码的12位前缀编码
如何用SQL找出无对应7位等效编码的12位编码
当然可以实现!针对你的需求,我们可以通过精准筛选+匹配验证的方式轻松搞定,下面直接给你可复用的SQL逻辑,再一步步拆解说明:
首先明确我们的目标筛选规则:
- 目标编码必须是12位且以'00000'开头的类型
- 去掉前5个'0'后得到的7位字符串,不存在于当前Code列中
解法1:使用NOT EXISTS(推荐,性能更优)
SELECT code FROM your_table_name WHERE -- 筛选12位以00000开头的编码 LENGTH(code) = 12 AND LEFT(code, 5) = '00000' -- 验证对应的7位编码不存在 AND NOT EXISTS ( SELECT 1 FROM your_table_name AS t2 WHERE t2.code = SUBSTRING(your_table_name.code, 6) );
解法2:使用LEFT JOIN(逻辑更直观)
如果你更习惯用表连接的思路,也可以这么写:
SELECT t1.code FROM your_table_name AS t1 LEFT JOIN your_table_name AS t2 ON t2.code = SUBSTRING(t1.code, 6) WHERE LENGTH(t1.code) = 12 AND LEFT(t1.code, 5) = '00000' AND t2.code IS NULL;
代码细节解释
- 筛选条件:
LENGTH(code) = 12 AND LEFT(code, 5) = '00000'精准锁定你要处理的12位编码类型 - 匹配验证:
SUBSTRING(code, 6)会从第6位开始截取字符串,把000001234567转换成1234567NOT EXISTS或者LEFT JOIN ... IS NULL都是用来判断转换后的7位编码是否在表中存在
针对你的示例数据验证
用你提供的测试数据运行以上SQL,会返回:
Code 000003456789 000004567891 000005678912
完全符合你的期望输出。
性能小贴士
因为你的表有几百万条数据,建议给code列添加索引,这样匹配查询时能避免全表扫描,大幅提升执行速度。
内容的提问来源于stack exchange,提问作者Nathair
相关产品推荐
相关产品推荐

