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

如何编写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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 22:10:29