Oracle Date列清理
发布时间:2020-12-12 13:50:35 所属栏目:百科 来源:网络整理
导读:我有一个table1(DueDate varchar2(20)).它有数千种不同格式的日期数据和一些不良数据,如字符. 例如. YYYYMMDD,MM/DD/YYYY,MM-DD-YYYY,M/D/YYYY,'ABCD'YYYYMMD,YYYYMDD, 现在我必须得到过去一周过去的日期.我怎么做? 感谢您的帮助. 这是在字符字段中存储日期
我有一个table1(DueDate varchar2(20)).它有数千种不同格式的日期数据和一些不良数据,如字符.
例如. YYYYMMDD,MM/DD/YYYY,MM-DD-YYYY,M/D/YYYY,'ABCD' YYYYMMD,YYYYMDD, 现在我必须得到过去一周过去的日期.我怎么做? 感谢您的帮助. 这是在字符字段中存储日期信息是如此糟糕的原因之一.最简单的选择是创建一个函数,尝试使用您拥有的任何优先级顺序(即01020 2003年1月2日或2001年2月3日或其他内容)将字符串转换为日期,并捕获异常.就像是 CREATE OR REPLACE FUNCTION my_to_date( p_str IN VARCHAR2 ) RETURN DATE IS l_date DATE; BEGIN l_date := to_date( p_str,'YYYYMMDD' ); RETURN l_date; EXCEPTION WHEN others THEN BEGIN l_date := to_date( p_str,'MM/DD/YYYY' ); RETURN l_date; EXCEPTION WHEN others THEN RETURN null; END; END; 有点像 SQL> CREATE OR REPLACE FUNCTION my_to_date( p_str IN VARCHAR2 ) 2 RETURN DATE 3 IS 4 l_date DATE; 5 BEGIN 6 l_date := to_date( p_str,'YYYYMMDD' ); 7 RETURN l_date; 8 EXCEPTION 9 WHEN others THEN 10 BEGIN 11 l_date := to_date( p_str,'MM/DD/YYYY' ); 12 RETURN l_date; 13 EXCEPTION 14 WHEN others 15 THEN 16 RETURN null; 17 END; 18 END; 19 / Function created. SQL> select my_to_date( '19000101' ) from dual; MY_TO_DAT --------- 01-JAN-00 SQL> ed Wrote file afiedt.buf 1* select my_to_date( '01/02/2005' ) from dual SQL> / MY_TO_DAT --------- 02-JAN-05 当然,您必须在代码中编写完整的有效日期格式代码,我只是处理列表中的前两个. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |