我有一个varchar2字段,其中包含日期.如何检查格式



我有一个字段(varchar2类型(,它包含日期。如何检查它是否为"MM/DD/RRRR"格式?

在Oracle 12.2中,您可以使用内置的VALIDATE_CONVERSION函数:

... WHERE VALIDATE_CONVERSION(col AS DATE, 'MM/DD/YYYY') = 1

或者您可以使用TO_DATE函数,在该函数中您可以指定转换错误的默认值:

TO_DATE(col DEFAULT '01/01/1900' ON CONVERSION ERROR, 'MM/DD/YYYY')
一个选项是创建一个函数,将字符串转换为日期。如果失败,则无效。

例如:

SQL> create or replace function f_check_date (par_datum in varchar2)
2    return varchar2
3  is
4    l_date date;
5  begin
6    l_date := to_date(par_datum, 'mm/dd/rrrr');
7    return ('Valid');
8  exception
9    when others then
10      return ('Invalid');
11  end;
12  /
Function created.

测试:

SQL> with test (datum) as
2    (select '05/18/2018' from dual union
3     select '99/98/7655' from dual union
4     select '01/02/3456' from dual union
5     select '13/22/1000' from dual
6    )
7  select datum, f_check_date(datum) is_valid
8  from test;
DATUM      IS_VALID
---------- --------------------
01/02/3456 Valid
05/18/2018 Valid
13/22/1000 Invalid
99/98/7655 Invalid
SQL>

结论:除了DATE之外,不要将日期存储在任何其他数据类型列中。

最新更新