【发布时间】:2021-03-21 19:39:54
【问题描述】:
我需要您对 REPLACE( 在 Oracle 中的 . 我需要在我的测试中替换一列中的许多字符,如果我想再次更改 5 和 4,可以将 5 更改为“测试”,你有解决方案吗?
【问题讨论】:
-
请以文本(而非图像)形式提供查询、数据和预期输出。
我需要您对 REPLACE( 在 Oracle 中的 . 我需要在我的测试中替换一列中的许多字符,如果我想再次更改 5 和 4,可以将 5 更改为“测试”,你有解决方案吗?
【问题讨论】:
我不认为你想做什么作为一个字符串操作。相反,您似乎想在参考表中查找值。您应该在数据库中有一个“资源状态”参考表。
如果数据库中没有,可以在查询中生成一个:
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
【讨论】:
如果你想匹配整个值,我会推荐一个case 表达式,它可以很容易地扩展。
假设您要将4 和5 都转码为“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' ) ?
replace() 不合适。如果值为45 怎么办?您的代码将返回 'TESTTEST',我想这不是 OP 想要的。此外,如果有很多值需要转码,case 可以更好地扩展(而replace() 需要嵌套函数调用)。