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

SQL查询字符串日期字段中不符合yyyy/mm/dd格式的错误数据行

筛选字符串日期字段不符合yyyy/mm/dd规范的SQL方案

核心判断逻辑

场景中不规范数据主要分两类:一类是错误录成mm/dd/yyyy格式的日期,一类是其他乱填的非日期脏数据,判断时要覆盖两类场景,规则如下:

  • 首先校验长度:标准yyyy/mm/dd格式固定长度为10位,长度不对的直接判定为不规范
  • 校验斜杠位置:标准格式第一个/在第5位、第二个/在第8位;而错误的mm/dd/yyyy格式斜杠在第3、6位,这一步可以直接把所有格式录反的错误数据筛出来
  • 最后校验日期合法性:拆分出的年、月、日必须是合法数字,且符合日期取值规则(比如月份不能大于12、日期不能超过当月最大天数),避免漏判乱填的脏数据

不同数据库的实现代码

MySQL

-- 替换表名、字段名为实际业务中的名称即可
SELECT * FROM 你的表名
WHERE
  CHAR_LENGTH(日期字符串字段) != 10
  OR SUBSTRING(日期字符串字段, 5, 1) != '/'
  OR SUBSTRING(日期字符串字段, 8, 1) != '/'
  OR STR_TO_DATE(日期字符串字段, '%Y/%m/%d') IS NULL;

PostgreSQL

SELECT * FROM 你的表名
WHERE
  CHAR_LENGTH(日期字符串字段) != 10
  OR SUBSTRING(日期字符串字段, 5, 1) != '/'
  OR SUBSTRING(日期字符串字段, 8, 1) != '/'
  OR TO_DATE(日期字符串字段, 'YYYY/MM/DD') IS NULL;

SQL Server

SELECT * FROM 你的表名
WHERE
  LEN(日期字符串字段) != 10
  OR SUBSTRING(日期字符串字段, 5, 1) != '/'
  OR SUBSTRING(日期字符串字段, 8, 1) != '/'
  OR TRY_CONVERT(DATE, 日期字符串字段, 111) IS NULL;

优化提示

如果业务对日期范围有明确要求,可以额外增加年份区间判断,比如要求年份在1990-2100之间,在WHERE条件中补充对应年份段的范围校验即可,能进一步规避极端边界值的误判。

内容的提问来源于stack exchange,提问作者Andy Reagan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 04:39:21