首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

对超出当月最大日期的字符型日期处置,如2012-02-30

2012-08-21 
对超出当月最大日期的字符型日期处理,如2012-02-30至于数据库为什么将日期,存储成字符,不去追究。当需要将

对超出当月最大日期的字符型日期处理,如2012-02-30
至于数据库为什么将日期,存储成字符,不去追究。当需要将字符转换为日期的时候,由于类似‘0000-00-00’及‘2012-02-30’这样的字符存在,不能直接转。我写了一个function,拿出来,抛砖引玉,大家多说说,类似情况是怎么处理的

SQL code
create or replace function CheckOutDate(DateString in varchar2)/* 入口参数:1.需要为10位 如:2012-01-012.月份需要小于12效果:若日超过当月最大日,则转换为月末ps:若你现在看到的这段注释,请注意阅读,如果你的参数不满足需求,建议你修改本段程序,增加判断处理规则,但是不要影响将现在支持的功能例如:增加对月份的判断、以及处理异常时,对字符串截取 改为根据‘-’进行截取以上 written by 师蒙 2012-5-22增加对0000-00-00的处理,转化为9999-01-01  add by shimeng 2012-5-22*/  return varchar2 is  Result varchar2(10);BEGIN/*shimeng 将字符格式的日期转化为日期类型*/IF DateString ='0000-00-00'  THEN select to_char(to_Date('9999-01-01', 'yyyy-mm-dd'), 'yyyy-mm-dd')    into Result    from dual;      return(Result);ELSE  select to_char(to_Date(DateString, 'yyyy-mm-dd'), 'yyyy-mm-dd')    into Result    from dual;    return(Result);  END IF;EXCEPTION/*shimeng 将字符格式的日期转化为日期类型,若字符不正确如 '2012-02-30' 则转换为 2012-2-29*/  when others then    select to_char(last_day(to_date(substr(DateString, 1, 7) || '01',                                    'yyyy-mm-dd')),                   'yyyy-mm-dd')      into Result      from dual;    return(Result);end CheckOutDate;


[解决办法]
将日期存储成字符 又转回来 就不符合日期了?

热点排行
Bad Request.