这是指先前其他人提出的问题 previous question
我的问题是如何调整此解决方案,以便在运行任何函数/脚本之前,名称和值字段将被删除任何其他+并更新,因此不会留下额外的+。
例如
Name Value
A+B+C+ 1+2+3+
A++B 1++2
这应该更新为
Name Value
A+B+C 1+2+3
A+B 1+2
更新完成后,我可以运行上一个问题中提供的解决方案。
由于
答案 0 :(得分:2)
您需要将++
替换为+
并删除字符串末尾的+
。
/* sample data */
with input(Name, Value) as (
select 'A+B+C+' ,'1+2+3+' from dual union all
select 'A++B' ,'1++2' from dual
)
/* query */
select trim('+' from regexp_replace(name, '\+{2,}', '+') ) as name,
trim('+' from regexp_replace(value, '\+{2,}', '+') ) as value
from input
如果您需要更新表格,则可能需要:
update yourTable
set name = trim('+' from regexp_replace(name, '\+{2,}', '+') ),
value= trim('+' from regexp_replace(value, '\+{2,}', '+') )
以更紧凑的方式,没有外部修剪(假设您没有前导+
):
/* sample data */
with input(Name, Value) as (
select 'A+B+C+' ,'1+2+3+' from dual union all
select 'A++B+++C+' ,'1++2+++3+' from dual union all
select 'A+B' ,'1+2' from dual
)
/* query */
select regexp_replace(name, '(\+)+(\+|$)', '\2') as name,
regexp_replace(value, '(\+)+(\+|$)', '\2') as value
from input
答案 1 :(得分:0)
您可以使用以下内容:
Select substr('1+2+3+', 0, length('1+2+3+')-1) from dual ;
Select replace('1++2', '++', '+') from dual;
我假设您的输出已存在于您可以使用的变量中。
编辑: 这是一个可以解决问题的函数(您可以在select子句中调用此函数,从而解决问题):
CREATE OR REPLACE Function ReplaceChars
( name_in IN varchar2 )
RETURN varchar2
IS
changed_string varchar2(20) ;
BEGIN
changed_string:=replace(name_in, '++', '+') ;
CASE WHEN substr(changed_string, -1) in ('+')
then
changed_string:=substr(changed_string,0, length(changed_string) - 1) ;
else changed_string:=changed_string ;
end CASE ;
RETURN changed_string;
END;
答案 2 :(得分:0)
您可以使用以下内容:
LTRIM(RTRIM (REGEXP_REPLACE (column_name, '\+{2,}', '+'), '+'),'+')
例如:
SELECT LTRIM(RTRIM (REGEXP_REPLACE ('+A+++B+C+++D++', '\+{2,}', '+'), '+'),'+') VALUE
FROM DUAL;
返回输出:A+B+C+D
答案 3 :(得分:-1)
如果你正在使用ssms,给它一个GO :::
UPDATE tablename
SET colname=
CASE colname WHEN LIKE '%++%' THEN
WHILE colname LIKE '%++%'
(REPLACE(colname,++,+))
END LOOP
WHEN LIKE '%+' THEN
SUBSTR(colname, 1, LENGTH(colname)-1)
WHEN LIKE '+%' THEN
SUBSTR(colname, 2, LENGTH(colname))
ELSE
colname
END