2016-11-28 146 views
0

我在sql中有一个需求,其中需要修改列名称XYZ。在那一栏中,我想用PT替换27007的每一个出现。例如:如果列值是2700702,那么新值应该是PT02。我该如何实现它?无法用新子字符串替换子字符串

+4

'取代(XYZ, '27007', 'PT')'? – jarlh

+1

您是否尝试过更换(XYZ,'27007','PT')? –

+0

感谢这有助于。我很担心自27007以后可以跟随任意数量的字符。这将工作完美 –

回答

0

它您需要在表中更改值:

update t 
    set xyz = replace(xyz, '27007', 'PT') 
    where xyz like '%27007%'; 
+0

在这种情况下,可能会更好没有WHERE条件。让引擎搜索字符串'27007'并在发现时替换它。使用WHERE条件时,无论如何都会在每一行中搜索字符串,并且每当找到匹配项时,REPLACE函数将再次搜索它,使工作量增加。 – mathguy

+3

没有WHERE条件,所有行都会被更新。在WHERE条件下,只有包含“27007”的行才会更新。 – vav

+0

REPLACE替换所有匹配项。所以如果你的字符串是'27007027007',那么它将被转换为'PT0PT'。如果这不是你想要的,你需要使用substr/instr或regexp_replace的组合 – vav