【问题标题】:How to replace first three characters of a string in oracleoracle如何替换字符串的前三个字符
【发布时间】: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 条记录;您是要更新表还是只在查询中执行替换;以及您的预期输出(同样,作为文本)。

标签: sql oracle


【解决方案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 之间的问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-15
    • 1970-01-01
    • 2012-11-01
    • 1970-01-01
    • 2020-03-31
    • 1970-01-01
    相关资源
    最近更新 更多