给定日期在Oracle中有效

时间:2013-12-22 03:16:20

标签: sql oracle

我想验证所有格式的有效日期

我收到此错误。

我的输入是IDateFormat =' MM / YY / DD'和IStringDate =' 2001-01-01'

我收到以下错误。

ORA-01843:不是有效月份

ORA-06512:at" NECHO_APP.CONVERTTODATE" ORA-06512:第10行2011-01-01流程退出。

CREATE OR REPLACE PROCEDURE convertToDate
                (IDateFormat        Varchar2,
                IStringDate     Varchar2,
              OConvertedDate    out timestamp,
                  OError OUT            Int )

AS

  TDateFormat       Varchar2(20);
  TStringDate       Varchar2(20);

BEGIN

OError  := 0;
TDateFormat := LTrim(RTrim(IDateFormat));
TStringDate  := LTrim(RTrim(IStringDate));
DBMS_OUTPUT.PUT_LINE(TStringDate);
IF IS_VALID(TStringDate,'yyyy-mm-dd') = 1 THEN

        SELECT TO_DATE(TStringDate,TDateFormat) INTO OConvertedDate FROM DUAL;
           OError := 0;
 END IF;

END;

 - FUNCTION:

    create or replace function is_valid(p_val in varchar2, fmt varchar2)
    return number
    is

      not_a_valid_day   exception;
      not_a_valid_month exception;
      pragma exception_init(not_a_valid_day, -1847);
      pragma exception_init(not_a_valid_month, -1843);
      l_date date;
    begin
      l_date := to_date(p_val, fmt);

      return 1;
    exception
      when not_a_valid_day or not_a_valid_month
      then return 0;
    end is_valid;

1 个答案:

答案 0 :(得分:1)

你应该使用这个

 SELECT TO_CHAR(TO_DATE(TStringDate,'YYYY-MM-DD'),TDateFormat) INTO OConvertedDate FROM DUAL;

但是,您应该使用to_date和to_char。