我在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上,这将是一项艰巨的活动。
答案 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部分,但它应该可以工作