IBMI中SQL中的多个字符替换函数(来自表)

时间:2018-08-27 10:43:39

标签: ibm-midrange rpgle

我在SQL中遇到替换功能问题。我有一个表(表A),其中有2个字段(Original_Char和Replacement_char)。 现在,对于程序中的字符串,我必须将Original_char字段中的每个字符替换为其相应的Replacement_char字段。

例如,如果我有一个记录Original_char ='A'和Replacement_Char ='%',并且如果我的字符串是'Apple Ball',则应将其替换为'%pple B%ll'。现在,如果我在此处再添加一个记录,即Original_char ='E'和Replacement_Char ='&',那么我的字符串将是'%ppl&B%ll'

我尝试使用SQL中的替换功能。它可以处理一条记录,但是表A可以具有任意数量的记录,并且字符串的所有Original_char字符都应替换为Replacement_char。

使用以下查询将给我多条记录(表A中的记录数)

SELECT                                         
replace('APPLE BALL',Original_char,replacement Char) FROM Table_A

结果应为

%PPLE B%LL 
APPL& BALL 

我能想到的唯一方法是将光标放在表A上,这将是一项艰巨的活动。

3 个答案:

答案 0 :(得分:0)

SELECT                                         
replace('APPLE BALL',Original_char,replacement Char) FROM Table_A

您的代码为表A中的每一行替换字符串“ APPLE BALL” ... 1次替换为A->% 2次,我将B->&替换为原始字符串。

获取结果后,必须详细说明字符串,然后再次详细说明... ...您需要迭代,也许某个过程可以为您提供帮助。

像这样的梳理:

CREATE PROCEDURE
    SCHEMA/PROCEDURE NAME
    (
    )
    LANGUAGE SQL
    SPECIFIC SCHEMA/PROCEDURE NAME
    NOT DETERMINISTIC
    MODIFIES SQL DATA

BEGIN
    DECLARE END_C1_SRS SMALLINT DEFAULT 0 ;
    DECLARE STRING_TO_MODIFY       CHAR(10) DEFAULT 'APPLE BALL' ;    

    DECLARE C1_SRS CURSOR FOR
    select replace(STRING_TO_MODIFY,Original_char,replacement Char) FROM Table_A

    DECLARE CONTINUE HANDLER FOR NOT FOUND SET END_C1_SRS = -1 ;
    OPEN  C1_SRS ;
    SET END_C1_SRS = 0 ;
    FETCH_C1_SRS:
    LOOP

        FETCH C1_SRS
        INTO
        STRING_TO_MODIFY
        IF END_C1_SRS = -1 THEN
            LEAVE FETCH_C1_SRS ;
        END IF ;                                                        ) ;
    END LOOP FETCH_C1_SRS ;
    CLOSE C1_SRS ;
END ;

答案 1 :(得分:0)

嵌套替换功能。

replace(
replace(
replace(mystring,'A','a')
,'B', 'b')
,'C,'c')

答案 2 :(得分:0)

感谢..。将所有“ Original_char”放入一个字符串(字符串A)。使用listagg函数。用'Replacement_char'(String B)做了同样的事情。.现在我只在需要更改它的String上使用%XLATE。.我仍然没有实现XLATE部分,但它应该可以工作