【问题标题】:REPLACE In oracle在 oracle 中替换
【发布时间】:2021-03-21 19:39:54
【问题描述】:

我需要您对 REPLACE( 在 Oracle 中的 . 我需要在我的测试中替换一列中的许多字符,如果我想再次更改 5 和 4,可以将 5 更改为“测试”,你有解决方案吗?

【问题讨论】:

  • 请以文本(而非图像)形式提供查询、数据和预期输出。

标签: sql oracle replace case


【解决方案1】:

我不认为你想做什么作为一个字符串操作。相反,您似乎想在参考表中查找值。您应该在数据库中有一个“资源状态”参考表。

如果数据库中没有,可以在查询中生成一个:

with resource_state_ref as (
      select 4 as resource_state_key, 'TEST' as val union all
      select 5 as resource_state_key, 'TEST' as val 
     )
select ref.val, t.*
from t left join
     resource_state_ref ref
     on t.resource_state_key = ref.resource_state_key

【讨论】:

    【解决方案2】:

    如果你想匹配整个值,我会推荐一个case 表达式,它可以很容易地扩展。

    假设您要将45 都转码为“TEST”:

    case when resource_state_key in (4, 5) then 'TEST' end as val
    

    或者如果你想要一个不同的值:

    case resource_state_key
        when 4 then 'TEST'
        when 5 then 'TEST2'
    end as val
    

    在Oracle中,后者也可以用厂商特定的函数decode()表示:

    decode(resource_state_key, 4, 'TEST', 5, 'TEST2') as val
    

    【讨论】:

    • 为什么不replace( replace( resource_state_key, 4, 'TEST' ), 5, 'TEST' )
    • @TaaviTiitsu:看起来 OP 想要匹配整个输入值(大概是一个数字),所以 replace() 不合适。如果值为45 怎么办?您的代码将返回 'TESTTEST',我想这不是 OP 想要的。此外,如果有很多值需要转码,case 可以更好地扩展(而replace() 需要嵌套函数调用)。
    猜你喜欢
    • 2021-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-12
    • 2013-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多