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

时间:2014-10-15 14:12:42

标签: sql oracle

我正在使用oracle,toad。

我想用退格键替换。

列包含:bla bla foo ,CALL HELPDESK

必须替换:bla bla foo CALL HELPDESK

基本上应该删除

我试过这样:

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

3 个答案:

答案 0 :(得分:9)

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

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

答案 1 :(得分:2)

考虑来替换所有逗号..

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

其他,简单

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

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

答案 2 :(得分:2)

由于替换的字符串已修复,为什么不简单地使用它:

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