ITPub博客

首页 > 数据库 > Oracle > 利用ORACLE正则表达式判断字符串是否为日期格式

利用ORACLE正则表达式判断字符串是否为日期格式

原创 Oracle 作者:rainnyzhong 时间:2010-01-04 10:24:12 0 删除 编辑

Author: rainny

Date:2009-2-18

CREATE OR REPLACE FUNCTION F_ISDATE(
P_COLVALUE
VARCHAR2,
P_mandatory
VARCHAR2) RETURN PLS_INTEGER IS
v_cn
PLS_INTEGER;BEGIN
IF P_mandatory =
'yes' THEN
IF P_COLVALUE IS NULL THEN
RETURN
2;
ELSE
BEGIN
SELECT
1
INTO V_CN
FROM DUAL
WHERE REGEXP_LIKE(P_COLVALUE,
'^[1-9][[:digit:]]{3}-[[:digit:]]{1,2}-[[:digit:]]{1,2}$')
AND NOT
REGEXP_LIKE
(P_COLVALUE,
'^[1-9][[:digit:]]{3}-((00|0)-((00|0)|[[:digit:]]{1,2})|[[:digit:]]{1,2}-(00|0))$')
AND REGEXP_SUBSTR(P_COLVALUE,
'[[:digit:]]{1,2}', 6) <= 12
AND REGEXP_SUBSTR(P_COLVALUE,
'[[:digit:]]{1,2}$') <= 31;
RETURN
1;
EXCEPTION
WHEN OTHERS THEN
RETURN
0;
END;
END IF;
ELSIF P_mandatory =
'no' THEN
IF P_COLVALUE IS NULL THEN
RETURN
1;
ELSE
BEGIN
SELECT
1
INTO V_CN
FROM DUAL
WHERE REGEXP_LIKE(P_COLVALUE,
'^[1-9][[:digit:]]{3}-[[:digit:]]{1,2}-[[:digit:]]{1,2}$')
AND NOT
REGEXP_LIKE
(P_COLVALUE,
'^[1-9][[:digit:]]{3}-((00|0)-((00|0)|[[:digit:]]{1,2})|[[:digit:]]{1,2}-(00|0))$')
AND REGEXP_SUBSTR(P_COLVALUE,
'[[:digit:]]{1,2}', 6) <= 12
AND REGEXP_SUBSTR(P_COLVALUE,
'[[:digit:]]{1,2}$') <= 31;
RETURN
1;
EXCEPTION
WHEN OTHERS THEN
RETURN
0;
END;
END IF;
END IF;
END F_ISDATE;
[@more@]

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/684234/viewspace-1030231/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: oracle加密函数
请登录后发表评论 登录
全部评论

注册时间:2010-03-29

  • 博文量
    19
  • 访问量
    230273