oracle如何替换字符串的前三个字符

Posted

技术标签:

【中文标题】oracle如何替换字符串的前三个字符【英文标题】:How to replace first three characters of a string in oracle 【发布时间】:2018-11-28 09:34:05 【问题描述】:

如何在 oracle 中替换字符串的前三个字符。假设我有 100 条员工 ID 记录,我需要替换 100 条中 30 到 50 条记录的前三个字符。

输入:111234,111235,111236,111237 输出:222234,222235,222236,222237(替换和更新)

【问题讨论】:

用什么替换 你要查询还是更新语句??? 请分享一些示例输入和预期输出。 请贴一些实际代码! 请包含minimal reproducible example 详细信息,例如:您的表格结构(作为文本或代码,而不是图像);你想换什么;你想用什么替换它;您如何订购数据以查找第 30 条或第 50 条记录;您是要更新表还是只在查询中执行替换;以及您的预期输出(同样,作为文本)。 【参考方案1】:

假设您想将第 30 到第 50 行的前 3 个字符替换为 abc(按某些标准排序),那么:

SELECT CASE
       WHEN ROWNUM BETWEEN 30 AND 50
       THEN 'abc' || SUBSTR( your_column, 4 )
       ELSE your_column
       END AS replaced_value
FROM   (
  SELECT *
  FROM   your_table
  ORDER BY <some_criteria>
)

【讨论】:

【参考方案2】:

检查一下:

    SELECT * FROM ns_words;

    mine
    mini
    mani
    nikhil
    sugandh
    mining

    SELECT regexp_replace(a,'(.3(.*)$)','abc\2') FROM NS_WORDS;
    abce
    abci
    abci
    abchil
    abcandh
    abcing

对于您的查询,如下所示:

SELECT regexp_replace(a,'(.3(.*)$)','abc\2') FROM NS_WORDS where col2 
between 30 and 50;

【讨论】:

"替换 30 到 50 之间的 100 条记录的前三个字符" 这并没有解决 OP 的(不清楚)只更新两个边界之间的记录的要求。此外,使用正则表达式是矫枉过正的。你可以使用SUBSTR @MT0 再给它一列,然后在 30 到 50 之间做一个 30 到 50 之间的问题

以上是关于oracle如何替换字符串的前三个字符的主要内容,如果未能解决你的问题,请参考以下文章

oracle 中如何将字符串中的英文单引号替换为右斜杠+英文单引号

使用正则表达式在机器人框架中用星号替换字符串的前两个和后两个字符以外的字符

sql如何对某个字段做字符替换?

sql批量替换及替换某字段的前N个字符

使用 XMLELEMENT Oracle 时如何替换 ' 或任何特殊字符

如何根据替换字符串在 Oracle Apex 中调整安装脚本?