您的位置:首页 > 数据库 > Oracle

利用日期正则表达式之识别合法日期

2016-12-13 15:18 246 查看
*

目的:利用日期正则表达式之识别合法日期

工具: regexp_like函数,日期正则表达式

适用范围: 日期格式为YYYY-MM-DD,字段类型为DATE类型或varchar2类型。注:两种字段类型在用法上有些差别,

*

日期正则表达式:是由多个正则表达式组成,识别了1900-01-01至2099-12-30。如果需求其他日期,可以自己添加

^((((19|20)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((19|20)\d{2})-(0?[469]|11)-(0?[1-9]|[12]\d|30))|(((19|20)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|((((19|20)([13579][26]|[2468][048]|0[48]))|(2000))-0?2-(0?[1-9]|[12]\d)))$


正则表达式分段介绍:

第一段:识别1900年至2099年1月、3月、5月、7月、8月、10月、12月中01天-31天。

(((19|20)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))


第二段:识别1900年至2099年4月、6月、9月、11月中的01天-30天

(((19|20)\d{2})-(0?[469]|11)-(0?[1-9]|[12]\d|30))


第三段:识别1900年至2099年02月01天-28天

(((19|20)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))


第四段:识别1900年至2099年中的闰年(2月有29天)

((((19|20)([13579][26]|[2468][048]|0[48]))|(2000))-0?2-(0?[1-9]|[12]\d))
建议可以直接写成,自己理解
((((19|20)([13579][26]|[2468][048]|0[48]))|(2000))-0?2-29)


当字段类型为varchar2时,用法

SELECT c.BIRTHDAY FROM P_C_CI_PERSON c WHERE regexp_like(c.birthday,'^((((19|20)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((19|20)\d{2})-(0?[469]|11)-(0?[1-9]|[12]\d|30))|(((19|20)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|((((19|20)([13579][26]|[2468][048]|0[48]))|(2000))-0?2-(0?[1-9]|[12]\d)))$');


字段类型为DATE时,用法

SELECT  c.IDENT_EXPIRED_DATE
FROM m_ci_per_identifier c
WHERE regexp_like(c.IDENT_EXPIRED_DATE,'(((19|20)\d{2})-(0[13578]|1[02])-(0[1-9]|[12]\d|3[01]))|(((19|20)\d{2})-(0[469]|11)-(0[1-9]|[12]\d|30))|(((19|20)\d{2})-02-(0[1-9]|1\d|2[0-8]))|((((19|20)([13579][26]|[2468][048]|0[48]))|(2000))-02-(0[1-9]|[12]\d))')
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oracle 正则表达式