【问题标题】:Replace a dynamically created Substring in Oracle query在 Oracle 查询中替换动态创建的子字符串
【发布时间】:2016-07-11 18:36:17
【问题描述】:

我正在使用 Oracle 11g 数据库,其中包含我想使用 oracle 查询将动态生成的文本替换为虚拟文本的数据。例如,我在表中的列包含数据: Hello Mike, Your registered no. is 3525. Kindly check the same.

现在的问题是,客户名称(即“Mike”)可能是动态的,这就是我无法使用 SUBSTR 功能的原因。我想用 XXXX 替换 3525 例如Hello Mike, Your registered no. is XXXX. Kindly check the same.

请帮我解决这个问题。我正在使用 Oracle 11g

【问题讨论】:

    标签: sql oracle oracle11g


    【解决方案1】:

    如果您的字符串中唯一的动态部分是名称(并假设名称不包含数字...),您可以尝试:

    select regexp_replace('Hello Mike, Your registered no. is 3525. Kindly check the same',
                          '([0-9])',
                          'X'
                         )
    from dual
    

    这只是将每个数字字符替换为“X”。

    要将诸如“AB3525”之类的内容替换为固定字符串,例如“XXXX”,您可以尝试将其替换为固定字符串:

    select regexp_replace('Hello Mike, Your registered no. is AB3525. Kindly check the same',
                          '(Hello [^\,]*\, Your registered no. is )([^\.]*)(\. Kindly check the same)',
                          '\1XXXX\3'
                         )            
    from dual    
    

    【讨论】:

    • 谢谢@Aleksej,太好了!为我工作,。只是一个附加问题。如果相同的数据也包含字母数字值怎么办? “你好迈克,你的注册号码。是 ABC12534 和可选编号。是 3525'。这里 ABC12534 的长度因不同的数据而异。我也可以解决这个问题吗?
    【解决方案2】:

    您可以使用 TRANSLATE,它会比 正则表达式 快得多。它只会出现任何带有X 的数字。

    例如,

    SQL> SELECT TRANSLATE('Hello Mike, Your registered no. is 3525. Kindly check the same',
      2                   '0123456789',
      3                   'XXXXXXXXXX') str
      4  FROM dual;
    
    STR
    --------------------------------------------------------------
    Hello Mike, Your registered no. is XXXX. Kindly check the same
    
    SQL>
    

    【讨论】:

    • 很高兴知道这个“翻译”功能。但是现在 registered no. 可以包含 alpha 字符不起作用。
    • @J.Chomel 它会起作用,只需要进行相应的调整。你能告诉我你想要的输出吗?
    • Omkar 上面询问了 disered 输出:如果相同的数据包含字母数字值,例如'你好迈克,你的注册号码。是 ABC12534 和可选编号。是 3525'。这里 ABC12534 的长度因数据而异。
    【解决方案3】:

    这是另一种方式:您可以将字符串拆分为多个表达式,并使用 \{position number} 访问匹配项

    select regexp_replace('Hello Mike, Your registered no. is 3525. Kindly check the same',
                          '(Hello )(.*)(, Your registered no. is )(.*)(. Kindly check the same)',
                          'Hello \2, Your registered no. is [xxx]. Kindly check the same'
                         )
    from dual
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-19
      • 2016-01-13
      • 2021-04-14
      • 2016-09-03
      • 2020-08-21
      • 1970-01-01
      相关资源
      最近更新 更多