+ -
当前位置:首页 → 问答吧 → oracle 自定义函数问题

oracle 自定义函数问题

时间:2011-10-08

来源:互联网

一字段,类型为varchar2,里面存的是日期,但格式为yyyymmdd和yyyy-mm-dd,里面有部分数据为空,求写一自定义函数,能在查询数据时全部转换为yyyy-mm-dd格式,空的显示为空

作者: jya126   发布时间: 2011-10-08

1、不要使用函数,直接操作表就可以

先把表中的这列全部转换成这样的日期类型 to_date(xxxx,'yyyy-mm-dd')
然后再转换成varchar2的日期类型to_char(xxxx,'yyyy-mm-dd')

如tbl_test表中有这样的字段 start_time

  select to_char(to_date(t.start_time,'yyyy-mm-dd'),'yyyy-mm-dd') as v_date
  from tbl_test t 
  where t.start_time is not null;

2、如果硬要使用函数的话,也可以,只是效率慢点
 SQL code

  CREATE OR REPLACE FUNCTION func_get_char
(
    i_date    in    varchar2
)
    return    varchar2
as
    v_date     varchar2(30);
    v_return   varchar2(30);

begin

    v_date := i_date;

    if v_date is null  then
       v_return :=null;
    else
       v_return := to_char(to_date(v_date,'yyyy-mm-dd'),'yyyy-mm-dd');
    end if;

    return v_return;

end func_get_char;
 

作者: lkz2004   发布时间: 2011-10-08

1楼:
我这样写了一个
create or replace function format_date(num in varchar) return varchar2
as
dt varchar2(20);
begin
  if num is null or num=0 or num=' ' then
  return null;
  elsif instr(num,'-')!=0 then return num;
  else
  select to_char(to_date(num,'yyyy-mm-dd'),'yyyy-mm-dd') into dt from dual;
  return dt;
  end if;
  exception when others then
  DBMS_OUTPUT.put_line ('数据错误');

end;
没用elseif是正确的,我想如果格式正确就返回,但这样报错说函数没返回值,求解

作者: jya126   发布时间: 2011-10-08