首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将IBMI中SQL中的函数替换为多个字符(来自表)

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

Stack Overflow用户
提问于 2018-08-27 18:43:39
回答 3查看 802关注 0票数 1

我在SQL中遇到了一个替换函数的问题。我有一个表(表A),其中有两个字段( 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中的replace函数。它可以处理一条记录,但是表A可以有任意数量的记录,字符串的所有Original_char字符都应该用Replacement_char替换。

使用下面的查询将得到多条记录(表A中的记录数量)

代码语言:javascript
运行
复制
SELECT                                         
replace('APPLE BALL',Original_char,replacement Char) FROM Table_A

结果将是

代码语言:javascript
运行
复制
%PPLE B%LL 
APPL& BALL 

我能想到的唯一方法是将光标放在表A上,这将是一个费力的活动。

EN

回答 3

Stack Overflow用户

发布于 2018-08-27 23:29:17

代码语言:javascript
运行
复制
SELECT                                         
replace('APPLE BALL',Original_char,replacement Char) FROM Table_A

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

在得到结果后,你必须详细说明字符串,并再次详细说明......You需要一个迭代,也许一个过程可以帮助你。

如下所示:

代码语言:javascript
运行
复制
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 ;
票数 0
EN

Stack Overflow用户

发布于 2018-08-28 02:12:32

嵌套replace函数。

代码语言:javascript
运行
复制
replace(
replace(
replace(mystring,'A','a')
,'B', 'b')
,'C,'c')
票数 0
EN

Stack Overflow用户

发布于 2018-08-29 16:42:49

THanks...Put所有的'Original_char‘到一个字符串(字符串A)..使用listagg函数。对‘Replacement_char’(字符串B)执行了同样的操作。现在,我只在需要更改的字符串上使用%XLATE。我还没有实现XLATE部分,但它应该可以工作

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52037560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档