脏数据排查需分类型处理:NULL与空字符串混用须用IS NULL或TRIM()识别;数值型字段用正则或SAFE_CAST过滤非法值;时间字段检查非法日期格式;通过GROUP BY+HAVING发现异常分布。
查 NULL 和空字符串混用的字段
很多脏数据源于业务逻辑没约束好,
和
(空字符串)被当成同义词乱用。比如用户姓名字段本该非空,结果既有
,又有
,甚至还有只含空格的值。
用
快速定位这类混合状态
很关键——不清理空格就漏掉
这类隐形脏数据
注意:MySQL 的
永远为 false,不能用
判断,必须用
识别数值型字段里的非数字内容
当一个定义为
或
的列实际存了
、
、
,数据库可能隐式转成 0 或报错,但数据语义已丢失。
PostgreSQL 可用
正则过滤非法值(注意小数点和负号需扩展)
MySQL 8.0+ 支持
,老版本只能靠
配合
粗筛(有精度损失)
更稳的做法是建视图或临时表,用
(SQL Server)或
(BigQuery)兜底,避免查询直接失败
找时间字段中的非法日期
或
字段里塞进
、
、
是典型脏数据,MySQL 在严格模式下会拒绝,但兼容模式下可能存成
并静默吞掉错误。
go语言参考手册 中文CHM版
Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。本文给大家带来Go参考手册,需要的可以来下载! Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian Lance Taylor, Russ Cox等人,并最终于2009年11月开源,在2012年早些时候发布了Go 1稳定版本。现在Go的开发已经是完全开放的,并且拥有一个活跃的社区。 Go 语言特色 简洁、快速、安全 并行、有趣、开源 内存管理、v数组安全、编译
下载
MySQL 查非法日期:
PostgreSQL 更严格,但仍有
或
可能混入,需单独排除
别依赖
这类函数——标准 SQL 没这个语法,各库实现不一,容易误判
用 GROUP BY + HAVING 暴露重复/异常分布
有些脏数据不靠单条记录能看出,得看整体分布。比如「用户等级」字段理论上只有 1~5,结果
却扫出 level = 999 或 -1。
先跑
,一眼看出离群值
配合
和
算两个)
字符串字段记得加
或
控制大小写敏感性,否则
和
会被当成不同值漏检
真实生产环境里,脏数据往往藏在「看起来合法」的边界上:比如手机号字段全是 11 位数字,但开头是
(虚拟运营商号段)或
(明显伪造),这种得结合业务规则再筛。自动化脚本容易忽略大小写、全半角、不可见字符(如
零宽空格),人工抽检仍不可替代。
NULL''NULL''WHERE name IS NULL OR TRIM(name) = ''TRIM()' ''' = NULL= NULLIS NULLINTDECIMAL'N/A''--''未知'NOT num_col ~ '^[0-9]+\.?[0-9]*$'REGEXPCAST(num_col AS SIGNED)num_col != CAST(num_col AS SIGNED)TRY_CASTSAFE_CASTDATEDATETIME'2023-02-30''0000-00-00''9999-99-99''0000-00-00'WHERE date_col '9999-12-31' OR date_col = '0000-00-00''infinity''-infinity'IS DATEGROUP BY level HAVING COUNT(*) > 0SELECT level, COUNT(*) FROM users GROUP BY level ORDER BY COUNT(*)HAVING COUNT(*) 找低频异常值(如拼写错误的枚举项 'gold''Gold'LOWER()COLLATE utf8mb4_0900_as_cs'VIP''vip'170000U+200B