我有一个保存日期的字段(varchar2类型)。如何检查它是否为“ MM / DD / RRRR”格式?
答案 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,不要将日期存储在任何其他数据类型列中。