我在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中的记录数量)
SELECT
replace('APPLE BALL',Original_char,replacement Char) FROM Table_A结果将是
%PPLE B%LL
APPL& BALL 我能想到的唯一方法是将光标放在表A上,这将是一个费力的活动。
发布于 2018-08-27 23:29:17
SELECT
replace('APPLE BALL',Original_char,replacement Char) FROM Table_A您的代码为表A中的每一行替换字符串"APPLE BALL“... 1次替换为A -> %2次我替换为B -> &但替换为原始字符串。
在得到结果后,你必须详细说明字符串,并再次详细说明......You需要一个迭代,也许一个过程可以帮助你。
如下所示:
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 ;发布于 2018-08-28 02:12:32
嵌套replace函数。
replace(
replace(
replace(mystring,'A','a')
,'B', 'b')
,'C,'c')发布于 2018-08-29 16:42:49
THanks...Put所有的'Original_char‘到一个字符串(字符串A)..使用listagg函数。对‘Replacement_char’(字符串B)执行了同样的操作。现在,我只在需要更改的字符串上使用%XLATE。我还没有实现XLATE部分,但它应该可以工作
https://stackoverflow.com/questions/52037560
复制相似问题