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

*

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

工具: 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)