Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1272527
  • 博文数量: 287
  • 博客积分: 11000
  • 博客等级: 上将
  • 技术积分: 3833
  • 用 户 组: 普通用户
  • 注册时间: 2007-08-16 08:43
文章分类
文章存档

2013年(15)

2012年(17)

2011年(17)

2010年(135)

2009年(85)

2008年(18)

分类: 系统运维

2009-10-25 17:24:21

RPGIV编程问题百解(33)UDF使用和编程(一)
 
问题提出:
 
 我在sqlrpgle中需要用到日期格式为YYMMDD,如何实现?
 我采用如下sql语句也可以实现,就是较复杂。
 
 SELECT cast(substr(year(current date),3,4) as varchar(2))||
     cast(month(current date) as varchar(2))||cast(day(current date) as varchar(2))
   FROM sysibm.sysdummy1
 
回答:
 
passthru(448081936) 14:15:12
   建议你写一个UDF,可以在sql调用中。或ile环境下,任何语言之间调用。如
   Mydate = exChgY4to2(mDate);
   当mDate=20091022时,Mydate=091022.
 
  在sql中,可以这样用
     select exChgY4to2(mDate) from sysibm.sysdummy1
  注:mDate是sysibm.sysdummy1表中的一个8位日期字段。
 
passthru(448081936) 15:09:14
  呵呵,干脆给你写个udf吧:
  P exChgY4to2     B                    export
  D exChgY4to2     PI            6  a
  D yyyymmdd                     8  p 0 const
  D retval           s           6  a
   /free
      monitor;
        retval = %subst(%char(yyyymmdd):3:6);
        on-error;
          retval = 'ERROR';
      endmon;
      return retval;
   /end-free
  P                E
 
厦门★passthru(448081936) 15:32:24
   udf除了可以在sql,ile任何语言中直接调用外,还可以做到,如果这个udf的输入值相对固定时,即相同,udf只运算第一次调用,接下去os/400自动跳过,直接返回上次调用结果。
 
阅读(1401) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~