【问题标题】:Oracle SQL add new column based on value of other columnOracle SQL根据其他列的值添加新列
【发布时间】:2021-07-16 23:10:14
【问题描述】:

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

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

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

提前谢谢你

【问题讨论】:

  • 您要提取的路径模式是什么? 2020年后还需要字符串吗?
  • 这是我需要提取的字符串 2020\Aug\03\5249013\5249013-07-25-18-96572
  • 路径总是/location/TELEDATA/

标签: sql oracle replace substring string-concatenation


【解决方案1】:

您可以在名为 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-Fiddle:

架构和插入语句:

 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小提琴here

【讨论】:

  • 谢谢 - 新路径将永远是 /location/TELEDATA/
  • 我已经修改了答案。
  • 你能修改你的答案吗?在你的 instr 末尾,你有 '/2020',1,1) + 1)... 但是这一年并不总是 2020 年,所以我不需要它作为静态值。有几年的数据,所以这是我想要提取的模式的一部分。我认为应该是 ,1,1,1) + 1) ???
  • 我的想法没有奏效...期待您的回复。
  • 太好了。恭喜!最良好的祝愿。
猜你喜欢
  • 1970-01-01
  • 2022-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多