更改字符串中的字符

时间:2017-03-02 11:49:23

标签: database oracle plsql

我想知道如何编辑oracle DB中存在的以下列

PPPPFPPPPPPPPPPPPPPPPPPPPPPPPFPPPPPPPP

我只想将F设置为P而不影响其他结构。 我有大约700条记录,我想将所有用户的位置(第5位)更改为P

我在想PLSQL而不是查询,所以请你指点一下。

谢谢

4 个答案:

答案 0 :(得分:1)

使用REGEXP_REPLACE

> SELECT REGEXP_REPLACE('PPPPFPPPPPPPPPPPPPPPPPPPPPPPPFPPPPPPPP', '^(\w{4}).(.*)', '\1P\2') AS COL_REGX FROM dual

COL_REGX
--------------------------------------
PPPPPPPPPPPPPPPPPPPPPPPPPPPPPFPPPPPPPP

答案 1 :(得分:0)

Klashxx答案很好 - REGEXP_REPLACE是要走的路。老式的方式一点一点地建立,所以你可以看到发生了什么:

WITH 
 test_data (text)
 AS  (SELECT '1234F1234F1234F1234F1234F1234F1234' FROM DUAL
 )
SELECT 
 text
,INSTR(text,'F',1,5)    --fifth occurence
,SUBSTR(text,1,INSTR(text,'F',1,5)-1) --substr up to that point
,SUBSTR(text,1,INSTR(text,'F',1,5)-1)||'P'    --add P
,SUBSTR(text,1,INSTR(text,'F',1,5)-1)||'P'||SUBSTR(text,INSTR(text,'F',1,5)+1)    --add remainder of string
FROM
 test_data
;

所以你要做的就是

UPDATE <your table>
SET <your column> = SUBSTR(<your column>,1,INSTR(<your column>,'F',1,5)-1)||'P'||SUBSTR(<your column>,INSTR(<your column>,'F',1,5)+1)

..假设您要更新所有行

答案 2 :(得分:0)

下面的解决方案在输入字符串的开头查找前五个字符。如果找到,则保持前四个不变,并用字母P替换第五个。注意,如果输入字符串是四个字符或更少,则保持不变。 (这包括with test_data ( str ) as ( select 'ABCDEFGH' from dual union all select 'PPPPF' from dual union all select 'PPPPP' from dual union all select '1234' from dual union all select null from dual ) select str, regexp_replace(str, '^(.{4}).', '\1P') as replaced from test_data ; STR REPLACED -------- -------- ABCDEFGH ABCDPFGH PPPPF PPPPP PPPPP PPPPP 1234 1234 5 rows selected. 作为输入字符串,显示在创建示例字符串的WITH子句中以及输出中 - 请注意输出有五行,即使最后一行中没有任何内容可见。)

dict

答案 3 :(得分:0)

将第5个'位'翻转为'P',它当前为'F'。

update table
set column = regexp_replace(column , '^(.{4}).', '\1P')
where regexp_like(column , '^.{4}F');