繁体   English   中英

如何替换列中的部分字符串,在 oracle

[英]How to replace part of string in a column, in oracle

我正在使用 oracle,蟾蜍。

我想用退格键替换。

列包括: bla bla foo,CALL HELPDESK

它必须替换: bla bla foo CALL HELPDESK

基本上应该去掉

我试过这样的:

UPDATE Mytable t
   SET column = REPLACE(t.U_MSG, ''%, CALL HELPDESK'', '% CALL HELPDESK')

REPLACE不使用通配符,它​​只是用第二个字符串替换第一个字符串的所有实例。 这应该工作:

UPDATE Mytable t
   SET column = REPLACE(t.U_MSG, ', CALL HELPDESK', ' CALL HELPDESK')

考虑不要替换所有逗号..

UPDATE Mytable t
   SET column = REGEXP_REPLACE(t.U_MSG,',( )*(CALL HELPDESK)','CALL HELPDESK')

否则,简单

UPDATE Mytable t
   SET column = REGEXP_REPLACE(t.U_MSG,',( )*')

注意,它也删除逗号后的所有空格。

由于替换的字符串是固定的,为什么不简单地使用:

UPDATE Mytable t
    SET column = SUBSTR(t.U_MSG, 1, LENGTH(t.U_MSG)-15)
--                                                  ^^
--                                    length of the replaced string
--                                    hard coded in this example, should
--                                    probably use `LENGTH(...)` for ease
--                                    of maintenance in production code

这可能不如其他解决方案那么聪明,但是即使命运的意外扭曲,在一些字符串中多次出现被替换的字符串,这也会有效:

WITH t AS (
  SELECT 'PLEASE, CALL HELPDESK' U_MSG FROM DUAL
  UNION ALL SELECT 'CALL HELPDESK, CALL HELPDESK! THEY SAID, CALL HELPDESK' FROM DUAL
)

SELECT SUBSTR(t.U_MSG, 1, LENGTH(t.U_MSG)-15) || ' CALL HELP DESK' MSG FROM t; 

生产:

MSG
------------------------------------------------------
PLEASE CALL HELP DESK
CALL HELPDESK, CALL HELPDESK! THEY SAID CALL HELP DESK

更新我的表 t
设置 t.U_MSG = replace(t.U_MSG, ......见上面的答案......)

因为原帖里有列名,放在set后面。 如果您使用 COLUMN 一词,它将出错。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM