【问题标题】:Dynamically replace data in a oracle field with SQL用 SQL 动态替换 oracle 字段中的数据
【发布时间】:2014-08-26 20:20:37
【问题描述】:

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

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

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

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

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

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

数据库:Oracle 11g。

【问题讨论】:

  • 不要将逗号分隔的值存储在单个列中。规范化您的模型,您的问题将简化为一个简单(高效)的JOIN 操作。
  • @a_horse_with_no_name 但是这个字段在很多地方都是这样使用的。有什么办法可以用SQL代替吗?

标签: sql oracle plsql


【解决方案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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-16
    • 2012-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    相关资源
    最近更新 更多