如果字符串的第 12 个字符等于“X”,如何替换它例如如果我有“ABXD1X354XJXOKJX”;在这种情况下,我会将第 12 位的“X”替换为“Y”。结果:'ABXD1X354XJYOKJX'
我正在考虑使用 regexp_replace 函数来指向第 12 个字符,测试它是否等于“X”,如果是,则将其替换为“Y”,但它比我想象的要复杂
这应该适用于您使用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
你可以做:
CASE SUBSTR(yourfield, 12, 1) WHEN 'X' THEN 'Y' END
并根据需要添加连接
在不了解您的字符串如何构成的情况下,这应该可以工作:
-- 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
为此,使用 SUBSTR 函数可能同样容易。
例如,如果 UPPER(SUBSTR('ABXD1X354XJYOKJX', 12, 1)) = 'X'