/* ===============================================================================================
Function Name:IS_DATE
Description: 判斷輸入的日期和指定格式 是否為有效日期, 返回:數值類型, 1:是, 0:否; 空值:返回0.
Argument: p_date_str IN DATE_string 日期的字符串, 如:"2021/07/09"
p_format IN 日期格式, 如: YYYY/MM/DD
History:
1.00 2021/7/09 samrv Creation
*================================================================================================*/
function is_date(p_date_str varchar2, p_format varchar2) return number is
v_format varchar2(20);
v_date date;
v_result number;
begin
v_result :=0;
--v_format := nvl(p_format,'yyyy-mm-dd');
begin
v_date := to_date(nvl(p_date_str, 'a') , p_format);
v_result := 1;
exception
when others then
return 0;
return v_result;
/* ===============================================================================================
Function Name:IS_TIME
Description: 判斷輸入的時間和指定格式 是否為有效時間, 返回:數值類型, 1:是, 0:否; 空值:返回0.
Argument: p_time_str IN time_string 日期的字符串, 如:"200749" 表示: 20:07:49
p_format IN 日期格式, 如:HH24MISS 表示24小時制 HH24:MI:SS 或 12小時制 HH:MI:SS
History:
1.00 2021/7/09 samrv Creation
*================================================================================================*/
FUNCTION IS_TIME(P_TIME_STR IN VARCHAR2,p_format varchar2) RETURN NUMBER is
v_time NUMBER;
v_hh varchar2(4);
v_mi varchar2(2);
v_ss varchar2(2);
V_RESULT NUMBER;
begin
V_RESULT := 0 ;
BEGIN
v_TIME := TO_NUMBER(nvl(P_TIME_STR, 'a') );
-- V_RESULT := 1;
if p_format= 'HH24MI' THEN
SELECT SUBSTR(P_TIME_STR,1,2) ,SUBSTR(P_TIME_STR,3,2)
INTO V_HH,V_MI
FROM DUAL;
IF TO_NUMBER(V_HH)>=0 AND TO_NUMBER(V_HH)<24 AND TO_NUMBER(V_MI)>=0 AND TO_NUMBER(V_MI)<=59 THEN
V_RESULT := 1;
V_RESULT :=0;
END IF;
-- END IF;
ELSif p_format= 'HH24MISS' THEN
SELECT SUBSTR(P_TIME_STR,1,2) ,SUBSTR(P_TIME_STR,3,2),SUBSTR(P_TIME_STR,5,2)
INTO V_HH,V_MI, V_SS
FROM DUAL;
IF TO_NUMBER(V_HH)>=0 AND TO_NUMBER(V_HH)<24 AND TO_NUMBER(V_MI)>=0 AND TO_NUMBER(V_MI)<=59 AND TO_NUMBER(V_SS)>=0 AND TO_NUMBER(V_SS)<=59 THEN
V_RESULT := 1;
V_RESULT :=0;
END IF;
-- END IF;
ELSif p_format= 'HHMI' THEN
SELECT SUBSTR(P_TIME_STR,1,2) ,SUBSTR(P_TIME_STR,3,2)
INTO V_HH,V_MI
FROM DUAL;
IF TO_NUMBER(V_HH)>=0 AND TO_NUMBER(V_HH)<=12 AND TO_NUMBER(V_MI)>=0 AND TO_NUMBER(V_MI)<=59 THEN
V_RESULT := 1;
V_RESULT :=0;
END IF;
--END IF;
ELSif p_format= 'HHMISS' THEN
SELECT SUBSTR(P_TIME_STR,1,2) ,SUBSTR(P_TIME_STR,3,2),SUBSTR(P_TIME_STR,5,2)
INTO V_HH,V_MI, V_SS
FROM DUAL;
IF TO_NUMBER(V_HH)>=0 AND TO_NUMBER(V_HH)<=12 AND TO_NUMBER(V_MI)>=0 AND TO_NUMBER(V_MI)<=59 AND TO_NUMBER(V_SS)>=0 AND TO_NUMBER(V_SS)<=59 THEN
V_RESULT := 1;
V_RESULT :=0;
END IF;
END IF;
exception
when others then
return 0;
RETURN V_RESULT;
/* ===============================================================================================
Function Name:IS_numeric
Description: 判斷輸入數值的字符串是否為有效數值(十進制), 返回:數值類型, 1:是, 0:否; 空值:返回0.
Argument: p_str IN DATE_string 日期的字符串, 如:"20107.09"
History:
1.00 2021/7/09 samrv Creation
*================================================================================================*/
FUNCTION is_numeric (p_str IN VARCHAR2)
RETURN NUMBER
v_str FLOAT;
BEGIN
IF p_str IS NULL
RETURN 0;
BEGIN
SELECT TO_NUMBER (p_str)
INTO v_str
FROM DUAL;
EXCEPTION
WHEN INVALID_NUMBER
RETURN 0;
RETURN 1;
END IF;
END is_numeric;
以上SQL在PLSQL 包中提取出来 。
优质生活从拆开始