如何从oracle表中删除列记录的逗号分隔部分

时间:2014-03-13 15:04:35

标签: sql oracle

我们有一个名为"名称"的oracle表。它有大约10k的记录。该表中有一列为" ID"。现在这个专栏已经搞砸了,记录看起来有点类似于以下内容。

ID
A.011
A.012
A.013
B.014
B.015
B.016
A-B-C
X_Y_Z

randomName
OtherName

现在,我们决定删除记录中的点(。)分隔部分,暂时保留其他记录。所以记录看起来应该是

ID
011
012
013
014
015
016
A-B-C
X_Y_Z
randomName
OtherName

4 个答案:

答案 0 :(得分:1)

您可以使用以下声明:

update names set id=regexp_replace(id,'^[^\.]+\.','')

如您所见,没有.的ID根本不受影响:

select regexp_replace('tst234','^[^\.]+\.','') from dual

此处使用.

进行测试
select regexp_replace('A.0234','^[^\.]+\.','') from dual

答案 1 :(得分:0)

使用正则表达式:

update names set id = case
                        when instr(id,'.') between 0 and length(id) - 1 then
                          regexp_replace(id,'^[^\.]*\.(.+)$','\1')
                        else id
                      end;

答案 2 :(得分:0)

UPDATE使用这个简单的查询:

UPDATE Name
   SET ID = SUBSTR(ID, INSTR(ID, '.')+1);

See SQL Fiddle

P.S。虽然有点奇怪,但SUBSTR(expr, 0) = SUBSTR(expr,1)。但它有效!

答案 3 :(得分:0)

只需使用以下sql查询,它将从字符串中删除.

UPDATE Names SET ID = regexp_replace(id,'\.+','');

以下查询将删除.

之前的所有字符
UPDATE Names SET ID = substr(id,instr(id,'.')+1);