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

hc8w905p  于 2023-01-01  发布在  Oracle
关注(0)|答案(3)|浏览(200)

我在用Oracle,蟾蜍。
我想用退格键替换。
色谱柱包括:第一个月
它必须取代:bla bla foo CALL HELPDESK
基本上,应该移除
我是这样试的:

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

fykwrbwg1#

REPLACE不使用通配符,它只是用第二个字符串替换第一个字符串的所有示例。

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

flvlnr442#

考虑用而不是替换ALL逗号。

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

其他,简单

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

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

ohfgkhjo

ohfgkhjo3#

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

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

相关问题