informix 日期边界处理

缘由: 以前没有学过INFORMIX 数据库,可现在项目的数据 ETL过程中必须要写informix的SP。于是照葫芦画瓢的写了一个SP。前几天运行还相当正常~ 。今天调用时发现报错信息:-1267: The result of a datetime computation is out of range.  BAIDU/GOOLE了一些网站,发现是由于时间的边界问题,而我的SP中正好有多处使用到日期的处理函数。
找到出错的地方:LET v_time = v_day -1 UNITS MONTH ;     --月份减一
分析原因:
原来informix里  v_day -1 UNITS MONTH 只是将v_day的对应月份减一、却不能把对应的日期减到合适日期。而今天又是20090331,结果就是20090231,不出错才怪呢~~
解决办法: 网上好多例子都是写单独函数处理。其实只要将informix的“不能把对应的日期减到合适日期”的问题处理掉即可。而解决这个问题方法就是将当前日期(v_day)依次往前减一天,直到此日期对应到上一月中也存在此日期即可。根据这个思路,用一小循环语句OK大吉~~

WHILE 1 = 1
  ON EXCEPTION SET v_esql   (--v_esql : define v_esql     integer; 做为接受异常号)
        IF v_esql <> 0  THEN  (由于informix环境设置的不同,异常号可能为正、也可能为负)
           LET v_day = v_day -1 UNITS day;  
        ELSE
           RAISE EXCEPTION v_esql;
        END IF;<

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值