0

我的日期格式是 dd-mm-yyyy。有一个字符串日期我想检查字符串日期是否为 'dd-mm-yyyy' 如果不是(如 dd/mm/yyyy,10-OCT-2013),该函数将返回 'NO'

function checkMydateFormat(checkDate IN VARCHAR)VARCHAR{

IF(check date is 'dd-mm-yyyy')THEN
  RETURN 'YES';
ELSE
  RETURN 'NO';
END IF;

}

如何编写 PL/SQL 函数来检查字符串日期的格式是否正确?

4

4 回答 4

2

尝试这样的事情

var par varchar2(20);
exec :par := '17-10-2013';
DECLARE
FUNCTION checkMydateFormat(checkDate IN VARCHAR2)
    RETURN VARCHAR2 IS RESULT VARCHAR2(10);
  BEGIN
    SELECT CASE
             WHEN regexp_like('7-10-2013', '\d{2}\-\d{2}\-\d{4}\', 'i') THEN
              'yes'
             ELSE
              'no'
           END into RESULT
      FROM dual;
    RETURN(RESULT);
  END checkMydateFormat;


BEGIN
  dbms_output.enable(NULL);
  dbms_output.put_line(checkMydateFormat(:par));

END;
于 2013-10-17T06:01:57.310 回答
1

您可以尝试使用所需格式将字符串转换为日期,并捕获异常。类似于以下内容:

create function checkMydateFormat(checkDate IN VARCHAR2)
RETURN VARCHAR2
IS
  v_result VARCHAR2(3);
  v_date    DATE;
BEGIN 
  BEGIN 
    v_date  := to_date(checkDate,'fxdd-mm-yyyy');
    v_result := 'YES';
  EXCEPTION
  WHEN OTHERS THEN v_result := 'NO'; 
  END;
  RETURN v_result;
END;
/
于 2013-10-17T05:50:02.890 回答
0
CREATE OR REPLACE
FUNCTION checkMydateFormat(
          checkDate IN VARCHAR2)
     RETURN VARCHAR2
IS
     v_result VARCHAR2(3);
     v_date   DATE;
BEGIN
     v_date   := to_date(checkDate,'fxdd-mm-yyyy');
     V_RESULT := 'YES';
     RETURN V_RESULT;
EXCEPTION WHEN OTHERS THEN
     V_RESULT := 'NO';
     RETURN v_result;
END;
于 2013-10-17T06:07:37.900 回答
0
create or replace function checkMydateFormat(checkDate IN VARCHAR2)
RETURN VARCHAR2
IS
  v_date    DATE;
BEGIN 
    v_date  := to_date(checkDate,'dd-mm-yyyy');
    RETURN 'YES';
  EXCEPTION
  WHEN OTHERS THEN 
    RETURN 'NO'; 
END checkMydateFormat;
于 2018-04-24T08:14:24.177 回答