使用SQL动态替换oracle字段中的数据

时间:2014-08-26 12:08:33

标签: sql oracle plsql

我有一个varchar列test_data,表格temp_table1中有csv格式的数据。 示例数据>

,1,2,3,
,14,18,
,3,4,

对于每个数字,有一个映射字符串,如1 =“ABC”,2 =“XYX”,3 =“PQR”,另一个 数据库映射表temp_table2

有没有办法通过使用a替换每个数字及其映射来显示数据 单个SQL查询??

例如:**,1,2,3**, as **ABC,XYZ,PQR**

我尝试过使用decode,regexp_replace但无法找到解决方案。

数据库:Oracle 11g。

1 个答案:

答案 0 :(得分:1)

有一种方法可以做到这一点,虽然有点难过。如果您对此有任何控制权,那么您真的应该使用联结表并修复数据库结构。

该方法是使用低效连接扩展数据,然后使用listagg()将结果重新组合在一起。结果是这样的:

select td.id, listagg(tt.val, ',') within group (order by td.id)
from test_data td left join
     temp_table2 tt
     on td.col like '%,' || tt.col || '%,'
group by td.id;