实现校验 yyyy-mm-dd 格式,一句话讲清逻辑:
1. 校验 SQL 代码
SELECT *
FROM 表名
WHERE REGEXP_LIKE(DUEDATE, '^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-9]|3[01])$');
2. 解释
正则片段 作用
^[0-9]{4} 匹配 yyyy(4位年,如2025)
- 匹配分隔符-
`(0[1-9] 1[0-2])`
- 匹配分隔符-
`(0[1-9] 1[0-9]
$ 严格结尾,确保无多余字符
在正则表达式里,竖杠(|)是“或”的意思,用来分隔不同的匹配分支,只要满足其中一个分支的规则,就视为匹配成功 。
核心逻辑:用正则强制约束 年-月-日 格式,仅校验格式合法性(如 2025-02-30 会被正则放行,但实际日期不合法,需结合 TO_DATE 进一步校验真实有效性 )。
如果是要 单独写校验逻辑(比如自定义函数),可以这样简化:
-- 直接校验字段是否符合 yyyy-mm-dd 格式
SELECT DUEDATE,
CASE
WHEN REGEXP_LIKE(DUEDATE, '^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-9]|3[01])$')
THEN '格式合法'
ELSE '格式非法'
END AS 格式校验结果
FROM 表名;
一句话总结:用正则片段精准约束 年/月/日 各自的数字范围,快速筛出符合 yyyy-mm-dd 格式的记录,需注意仅校验格式,不保证日期真实存在(如 2025-04-31 格式符合但实际无此日期 )。