我有一个保存日期的varchar2字段。如何检查格式?

时间:2018-07-20 06:52:24

标签: oracle date

我有一个保存日期的字段(varchar2类型)。如何检查它是否为“ MM / DD / RRRR”格式?

2 个答案:

答案 0 :(得分:1)

在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')

答案 1 :(得分:0)

一个选项是创建一个函数,将该字符串转换为日期。如果失败,则无效。

例如:

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,不要将日期存储在任何其他数据类型列中。