1

如果字符串的第 12 个字符等于“X”,如何替换它例如如果我有“ABXD1X354XJXOKJX”;在这种情况下,我会将第 12 位的“X”替换为“Y”。结果:'ABXD1X354XJYOKJX'

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

4

4 回答 4

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 小提琴演示

于 2013-04-30T19:00:50.163 回答
1

你可以做:

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

并根据需要添加连接

于 2013-04-30T19:00:19.997 回答
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
于 2013-04-30T19:08:55.563 回答
0

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

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

于 2013-04-30T18:59:58.640 回答