我自己在informix-4GL下写的几个跟日期有关的函数

来源: 作者: 2007-11-25 出处:pcdog.com


1.
##SYNTAX        CALL s_monbend(p_yy,p_mm)
##              RETURNING l_bdate,l_edate
##DESCRIPTION   讀取該月份所在的之第一天及最後一天
##PARAMETERS    p_yy 年 p_mm 月
##RETURNING             l_bdate  該月之第一天
##                      l_edate  該月之最後一天
# Date & Author..: 04/04/23 by Kerry
 
FUNCTION s_monbend(p_yy,p_mm)
  DEFINE p_yy,p_mm     INTEGER
  DEFINE n_yy,n_mm     INTEGER
  DEFINE l_bdate,l_edate       DATE,
         c_bdate               char(10),
         c_yeare               char(04),
         c_month               char(02)
   
  LET c_yeare=p_yy
  LET c_month=p_mm using '&&'
  LET c_bdate=c_yeare[3,4],c_month,'01'
  LET l_bdate=c_bdate
    LET n_yy=p_yy
  LET n_mm=p_mm+1
  IF n_mm=13 THEN LET n_yy=n_yy+1 LET n_mm=n_mm-12 END IF
  LET l_edate=MDY(n_mm,1,n_yy)-1
    RETURN l_bdate,l_edate
END FUNCTION

2.
##SYNTAX        CALL s_mothck(p_date)
##              RETURNING l_bdate,l_edate
##DESCRIPTION   讀取該日期所在的月份之第一天及最後一天
##PARAMETERS    p_date  日期
##RETURNING     l_bdate  該月之第一天
##              l_edate  該月之最後一天
# Date & Author..: 04/04/23 by Kerry

FUNCTION s_mothck(p_date)
   DEFINE  p_date     DATE,
           p_bdate    DATE,
           p_edate    DATE,
           l_date     DATE,
           b_date     CHAR(08),
           l_tmp      SMALLINT
   
   IF p_date IS NULL OR p_date=' ' THEN
      RETURN '',''
   END IF
   LET b_date=p_date USING "yyyymmdd"
   IF b_date[7,8]<>'01' THEN       LET b_date=b_date[1,4],b_date[5,6],b_date[7,8]*0+1 USING '&&'
   END IF
   LET p_bdate = MDY(b_date[5,6],b_date[7,8],b_date[1,4])    #該月第一天
   #將月份加一, 再將日期減一, 即可得到上月的最後一天
   LET b_date=b_date[1,4],b_date[5,6]+1 USING '&&',b_date[7,8]
   IF b_date[5,6]='13' THEN       LET b_date=b_date[1,4]+1 USING '&&&&',b_date[5,6]*0+1
                  USING '&&',b_date[7,8]
   END IF
   LET l_date = MDY(b_date[5,6],b_date[7,8],b_date[1,4]) #該月之最後一天
   LET p_edate=l_date-1
   RETURN p_bdate,p_edate
END FUNCTION

上一篇:怎么看待informix所在操作系统与硬件
下一篇:Informix Dynamic Server的安装