如何编写SQL语句筛选6位数字代码并忽略超6位的行?
实现仅保留6位纯数字行的SQL方案
场景说明
要筛选出表中恰好6位纯数字的记录,忽略或删除位数不符、包含非数字字符的行,以下是两种常用方案:
1. 查询符合条件的记录
假设目标字段为code,表名为your_table,可以通过PATINDEX校验纯数字格式,结合LEN判断长度:
SELECT * FROM your_table -- 确保字段仅含数字(无字母、符号等非数字字符) WHERE PATINDEX('%[^0-9]%', code) = 0 -- 确保长度恰好为6位 AND LEN(code) = 6;
不同数据库也有更适配的写法:
- SQL Server 2017+ 可借助类型转换简化判断:
SELECT * FROM your_table WHERE TRY_CAST(code AS BIGINT) IS NOT NULL AND LEN(code) = 6;
- PostgreSQL 可直接用正则匹配:
SELECT * FROM your_table WHERE code ~ '^[0-9]{6}$';
2. 删除不符合条件的记录
重要提醒:执行删除操作前务必先备份原表数据,避免误删无法恢复
-- 第一步:备份原表数据到临时表 SELECT * INTO your_table_backup FROM your_table; -- 第二步:删除非6位纯数字的行 DELETE FROM your_table WHERE PATINDEX('%[^0-9]%', code) <> 0 OR LEN(code) <> 6;
关于Patindex使用失败的排查
你之前用Patindex未成功,大概率是两个细节没处理:
- 仅校验了数字格式,但没添加长度判断;
- 正则表达式写法错误(比如用
%[0-9]%只能判断字段包含数字,而非全是数字,正确写法是%[^0-9]%——匹配到非数字字符则返回非0值,返回0说明字段全为数字)。
内容的提问来源于stack exchange,提问作者user17600203
相关产品推荐
相关产品推荐

