在oracle中更改列中的特定位

mwngjboj  于 2023-08-03  发布在  Oracle
关注(0)|答案(2)|浏览(116)

我想根据位的位置更改oracle数据库中的特定位。我已经找到了一些相关的链接,但无法得到想要的结果。例如,值为11110,我们希望从位置2重置位。结果将是10110,格式为“1”“0”“1”“1”“0”。请帮助同样的。

cclgggtu

cclgggtu1#

您正在存储一个字符串,其中要用字符“0”替换左数第二个字符。您可以使用SUBSTR来实现这一点。

select 
  substr(code, 1, 1) -- first character
  || 
  '0' -- the '0' at the second position
  ||
  substr(code, 3) -- everything from the third character to the end
from codes;

字符串

4urapxun

4urapxun2#

substr和串联可能最适合这样的简单情况,但您也可以查看regex_replace

with demo (str) as
    ( select '11111' from dual )
select str as original
     , regexp_replace(str, '^(.{1})(.{1})(.*)$', '\10\3') as replaced
from   demo;

ORIGINAL REPLACED
-------- ---------
11111    10111

个字符
\1\3是指圆括号中的第1个和第3个表达式。
这里并不需要{1}长度说明符,只是在需要调整要替换的字符的位置和长度时才使用。例如,替换两个字符的子字符串可能如下所示:

with demo (str) as
    ( select 'Sneeze' from dual )
select str as original
     , regexp_replace(str, '^(.{2})(.{2})(.*)$', '\1oo\3') as replaced
from   demo;

ORIGINAL REPLACED
-------- ---------
Sneeze   Snooze


小提琴:https://dbfiddle.uk/x7c7P2SX
Regex细分:https://regex101.com/r/uLCiLu/1

相关问题