我正在尝试替换或删除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