替换在/400 db2中不可用的功能



我正在尝试替换或删除DB2/400 IBM系统中读取数据中的" - "字符。它在MS-SQL中非常常见,可以使用替换函数进行替换,但在DB2/400 V5R2中,此功能似乎不可用。在这方面,有人可以帮助我吗?

您实际上必须使用db2/400 ...

当前支持I(6.1,7.1& 7.2)的DB2版本具有替换()函数。

i5/os v5r4参考的我的db2也显示了替换()。

似乎将替换()添加到iSeries v5r3的db2中;它于2004年6月发布。

我可以想象您可能能够在2004年之前找到一篇文章,展示如何创建等效的用户定义的函数。

在V5R3上进行了轻微测试,以下是A [由于缺乏DB2/400 SQL供应的功能用户定义的函数(UDF)版本]更换V5R2上的标量;术语"有些"含义,即默认混合的vs sbcs和ccsID以及键入的指定长度限制了不同的字符串字符串输入和返回值,尽管可以根据创建函数的调整函数调整这些字符串,但这些长度可以根据Whorever的需求进行调整。将调用先前创建的替换标量UDF:

  CREATE FUNCTION REPLACEX /* private version of REPLACE() */
   ( SRC_STR VARCHAR(5000) /* source string; for mixed data or ccsid 1208? */
   , FND_STR VARCHAR( 100) /* search string */                               
   , RPL_STR VARCHAR( 100) /* replace-with string */                         
   ) RETURNS VARCHAR(8000) /* return string; for mixed data or ccsid 1208? */
   LANGUAGE SQL                                                              
   SPECIFIC REPLACEX                                                         
   RETURNS NULL ON NULL INPUT                                                
   NO EXTERNAL ACTION                                                        
   ALLOW PARALLEL                                                            
   SET OPTION SRTSEQ=*HEX                                                    
            , DECMPT=*PERIOD                                                 
            , DBGVIEW=*SOURCE                                                
  BEGIN                                                                      
   declare strpos int default 1 ;  /* start position for locate */           
   declare nxtpos int default 0 ;  /* next "found" position     */           
   declare fndlen int default 0 ;  /* length of fnd_str         */           
   declare rtnstr varchar(8000) default '' ; /* result-string   */           
   set nxtpos = locate( fnd_str, src_str, strpos ) ;                         
   set fndlen = length( fnd_str ) ;                                          
   while ( nxtpos > 0 ) do                                                   
    set rtnstr = rtnstr                                                      
          concat substr( src_str, strpos, ( nxtpos - strpos ) )              
          concat rpl_str                                                     
    ;                                                             
    set strpos = nxtpos + fndlen ;                                
    set nxtpos = locate( fnd_str, src_str , strpos ) ;            
    if ( nxtpos > 0 ) then /* adjust per *start* spec on LOCATE */
     set nxtpos = nxtpos + strpos - 1 ;                           
    end if ;                                                      
   end while ;                                                    
   set rtnstr = rtnstr                                            
         concat substr( src_str, strpos )                         
   ;                                                              
   return                                                         
      rtnstr                                                      
   ;                                                              
  END                                                             

相关内容

  • 没有找到相关文章

最新更新