替换字符串中的特定字符

时间:2013-04-30 18:54:15

标签: oracle plsql

如果字符串的第12个字符等于'X',怎么能替换它 例如,如果我有'ABXD1X354XJXOKJX';在这种情况下,我将用'Y'替换第12位的'X'。结果:'ABXD1X354XJYOKJX'

我正在考虑使用regexp_replace函数指向第12个字符,测试它是否等于'X',如果是,则将其替换为'Y',但它比我想象的更复杂

4 个答案:

答案 0 :(得分:3)

这应该适用于SUBSTR

select 
  substr('ABXD1X354XJXOKJX', 1, 11) ||
  case when substr('ABXD1X354XJXOKJX', 12, 1) = 'X' THEN 'Y' ELSE substr('ABXD1X354XJXOKJX', 12, 1) END ||
  substr('ABXD1X354XJXOKJX', 13)
from dual

SQL Fiddle Demo

答案 1 :(得分:1)

你可以这样做:

  CASE SUBSTR(yourfield, 12, 1) WHEN 'X' THEN 'Y' END

并根据需要添加连接

答案 2 :(得分:1)

在不知道如何构成你的字符串的情况下,这应该有效:

-- matches:
select regexp_replace('12dasdf32432Xasdasd', '([[:alnum:]]{11})(X{1})', '\1Y' ) from dual
union
-- doesn't match:
select regexp_replace('12dasdf32432Zasdasd', '([[:alnum:]]{11})(X{1})', '\1Y' ) from dual

答案 3 :(得分:0)

为此,使用SUBSTR功能可能同样容易。

示例,如果UPPER(SUBSTR('ABXD1X354XJYOKJX',12,1))='X'