使用regexp_replace进行Oracle sql更新

时间:2013-06-18 17:34:45

标签: sql regex oracle sql-update

我在表中有大约2000行(“传感器”,其中有超过2000行),我需要在其中更新一个列,即sensorname。

更新中的部分替换是基于另一个表deviceport的内容。

Deviceport通过此deviceportid列与更新表相关 - sensor.deviceportid = deviceportid。因此,每行的实际更新是不同的。我不想写2000更新语句,但我无法弄清楚我的“where”语句会说什么。

UPDATE sensor sn SET sn.sensorname = ( 
    SELECT REGEXP_REPLACE(
        sensorname, 
        '^P(\d)', 
        'J ' || (
                SELECT d.deviceportlabel 
                FROM deviceport d 
                WHERE d.deviceportid = s.deviceportid
                ) || 
       ' Breaker \1'
    )
    FROM sensor s 
    WHERE REGEXP_LIKE( sensorname, '^P(\d)') 
) 
WHERE ...?

任何线索?

2 个答案:

答案 0 :(得分:1)

试试这个: -

UPDATE sensor sn, deviceport d 
SET sn.sensorname = REGEXP_REPLACE(
        sn.sensorname,'^P(\d)', 'J '|| d.deviceportlabel||' Breaker \1')
WHERE d.deviceportid = sn.deviceportid
AND REGEXP_LIKE( sn.sensorname, '^P(\d)');

答案 1 :(得分:1)

UPDATE sensor sn 
SET sn.sensorname = 'J ' || 
   (
     SELECT d.deviceportlabel 
     FROM deviceport d 
     WHERE d.deviceportid = sn.deviceportid
   ) || ' Breaker ' || substr(sn.sensorname, 2, 1)
WHERE REGEXP_LIKE( sn.sensorname, '^P\d')