文字列の 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' の場合