暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle varchar2到日期转换并将不一致值替换为null

askTom 2016-03-17
161

问题描述

我有一个表,里面有有效数据和无效数据

例如,数据类型为varchar 2

日期
1
2
1/12/15
21/11/14
20/1/14
11/12/2015
21/12/2011

我希望输出为

空的
空的
01/12/2015
20/01/2014
.
.
21/12/2011

请帮我问一个问题

专家解答

SQL> create or replace
  2  function date_convert(p_str varchar2) return date is
  3    x date;
  4  begin
  5    x := to_date(p_str,'dd/mm/yyyy');
  6    return x;
  7  exception
  8    when others then return null;
  9  end;
 10  /

Function created.

SQL>
SQL>
SQL> drop table t1 purge;

Table dropped.

SQL>
SQL> create table t1 ( str varchar2(20));

Table created.

SQL>
SQL> insert into t1 values ('1');

1 row created.

SQL> insert into t1 values ('2');

1 row created.

SQL> insert into t1 values ('10/10/2014');

1 row created.

SQL> insert into t1 values ('10/12/2014');

1 row created.

SQL> insert into t1 values ('10/99/2014');

1 row created.

SQL>
SQL> select date_convert(str) from t1;

DATE_CONVERT(STR)
-------------------


10/10/2014 00:00:00
10/12/2014 00:00:00



如果您有数百万行要检查,那么只在必要时调用该函数可能会获得性能优势,例如

SQL> select
  2    case
  3      when length(str) between 8 and 12
  4         and str like '%/%/%' then date_convert(str)
  5    end  dte
  6  from t1;

DTE
-------------------


10/10/2014 00:00:00
10/12/2014 00:00:00



「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论