Oracle SQL 根据其他列的值添加新列

时间:2021-04-22 17:32:43

标签: sql oracle replace substring string-concatenation

我正在寻求一些帮助,以根据另一列的值创建一个新列 - 如果这甚至可能的话...这不是一个理想的解决方案,但我已经没有选择了。

我需要替换开始文件夹路径,改变\的方向并改变扩展名

Existing Field:

\\BRRNAKCL12\Audiofiles22\1Year\Diogarfngal_ZZZZZZZZZ\2020\Aug\03\5249013\5249013-07-25-18-96572.cca

New Field:

/location/TELEDATA/2020/Aug/03/5249013/5249013-07-25-18-96572.wav

Oracle 版本 19.2.1.247 版

提前致谢

1 个答案:

答案 0 :(得分:2)

您可以向表中添加一个名为 NewField 的新列:

Alter table TableName add NewField varchar(500);

然后通过替换 ExistingField 中的一些字符来更新 NewField。

update TableName set NewField= replace(replace(existingfield,'\','/'),'.cca','.wav')

这里我只是将 '' 替换为 '/',将 '.cca' 替换为 '.wav'。

还要替换路径:

update TableName set NewField= '/location/TELEDATA/'||substr(replace(replace(existingfield,'\','/'),'.cca','.wav'),instr(replace(replace(existingfield,'\','/'),'.cca','.wav'),'/2020',1,1) + 1)

DB-小提琴:

架构和插入语句:

 create table mytable (existingfield varchar(500));

 insert into mytable values('
 \\BRRNAKCL12\Audiofiles22\1Year\Diogarfngal_ZZZZZZZZZ\2020\Aug\03\5249013\5249013-07-25-18-96572.cca');

添加新列:

 Alter table mytable add NewField varchar(500);

更新查询:

 update mytable set NewField= '/location/TELEDATA/'||substr(replace(replace(existingfield,'\','/'),'.cca','.wav'),instr(replace(replace(existingfield,'\','/'),'.cca','.wav'),'/2020',1,1) + 1)

选择查询:

 select * from mytable;

输出:

<头>
EXISTINGFIELD NEWFIELD
\BRRNAKCL12\Audiofiles22\1Year\Diogarfngal_ZZZZZZZZZ\2020\Aug\03\5249013\5249013-07-25-18-96572.cca /location/TELEDATA/2020/Aug/03/5249013/5249013-07-25-18-96572.wav

db<>fiddle here