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 に答える