ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

informix 日期边界处理

2021-07-01 14:31:35  阅读:170  来源: 互联网

标签:边界 DATETIME 日期 informix DATE EXPRESSION day


缘由: 以前没有学过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;
  END EXCEPTION;
  
  LET v_time = v_day -1 UNITS MONTH ;     --月份减一
  EXIT WHILE;
  END WHILE;

总结: 1、不熟悉的东西用起来,小问题都会变成大问题(俺可用了两个多小时才把问量前因后果给解决了~~ )
            2、informix就是没oracle强大,这么个函数都会存在这样的小BUG~ 。
            3、把informix日期函数又了解了一点点~~


附:infomix日期函数
       1)DAY(DATE/DATETIME EXPRESSION)   返回指定表达式中的当月几号
    2)MONTH(DATE/DATETIME EXPRESSION)  返回指定表达式中的月份
    3)YEAR(DATE/DATETIME EXPRESSION)   返回指定表达式中的年份
    4)WEEKDAY(DATE/DATETIME EXPRESSION) 返回指定表达式中的当周星期几
    5)DATE(NOT DATE EXPRESSION)     返回指定表达式代表的日期值
    6)TODAY                返回当前日期的日期值
    7)CURRENT[first to last]        返回当前日期的日期时间值
    8)COLNAME/EXPRESSION UNITS PRECISION  返回指定精度的指定单位数
    9)MDY(MONTH,DAY,YEAR)       返回标识指定年、月、日的日期值
    10)DATETIME(DATE/DATETIME EXPRESSION)FIRST TO LAST 返回表达式代表的日期时间值
    11)INTERVAL(DATE/DATETIME EXPRESSION)FIRST TO LAST 返回表达式代表的时间间隔值
    12)EXTEND(DATE/DATETIME EXPRESSION,[first to last])返回经过调整的日期或日期时间

    字符串转换成日期格式 : to_date('2008-01-01','%Y-%m-%d')

标签:边界,DATETIME,日期,informix,DATE,EXPRESSION,day
来源: https://blog.csdn.net/linkeyzhu/article/details/118385723

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有