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

Oracle SQL add new column based on value of other column

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

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

Existing Field:

\BRRNAKCL12\Audiofiles22Year\Diogarfngal_ZZZZZZZZZ20\Aug4901349013-07-25-18-96572.cca

New Field:

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

Oracle 版本 19.2.1.247

提前致谢

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

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-Fiddle:

架构和插入语句:

 create table mytable (existingfield varchar(500));

 insert into mytable values('
 \BRRNAKCL12\Audiofiles22Year\Diogarfngal_ZZZZZZZZZ20\Aug4901349013-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查询:

 select * from mytable;

输出:

EXISTINGFIELD NEWFIELD
\BRRNAKCL12\Audiofiles22Year\Diogarfngal_ZZZZZZZZZ20\Aug4901349013-07-25-18-96572.cca /location/TELEDATA/2020/Aug/03/5249013/5249013-07-25-18-96572.wav

db<>fiddle here