【问题标题】:How to replace original text after a specific word at oracle? [closed]如何在 oracle 的特定单词后替换原始文本? [关闭]
【发布时间】:2022-12-17 10:22:46
【问题描述】:

我在 DB 收到一条关于唯一 OTP 消息的消息,如下所示。我想在不破坏其他部分的情况下将 7466 替换为 7**6 。我尝试使用REGEXINSTR 但它不起作用关于解决方案的任何建议? OTP 代码必须是唯一的,因此在任何消息中,我要更改的部分都是不同的。 OTP 代码不应始终与同一个地方重合。

我还有三种不同类型的消息。所以我不在列中存储 OTP 代码。它只是存在于消息列中。

SELECT  id, SMS_TO_CUSTOMER  FROM CTB.CTB_SMS_HISTORY
WHERE 1 = 1 AND id = '51684'

原文:

不要分享您的密码。您只有一个密码,即 7466 含税 69.9 美元,......

预期结果:

请勿共享您的密码。您只有一个密码,即 7**6 含税 69.9 美元,.......

像这样;

留言一: 请勿共享您的密码。您只有一个密码,即 6**6 含税 0.01 美元,…………

留言2: ............, 6**6 你必须输入验证码.................

留言3: 6**6 .................. 0.05$ o ...............

【问题讨论】:

    标签: sql regex oracle


    【解决方案1】:

    使用REPLACE

    SELECT  id,
            REPLACE(SMS_TO_CUSTOMER, ' 7466 ', ' 7**6 ') AS sms_to_customer
    FROM    CTB.CTB_SMS_HISTORY
    WHERE   id = '51684'
    

    或者,对于通过 :otpcode 绑定变量传递给查询的动态代码:

    SELECT  id,
            REPLACE(
              SMS_TO_CUSTOMER,
              ' ' || :otpcode || ' ',
              ' ' || SUBSTR(:otpcode, 1, 1)
                  || LPAD('*', LENGTH(:otpcode) - 2, '*'
                  || SUBSTR(:otpcode, -1, 1)
                  || ' '
            ) AS sms_to_customer
    FROM    CTB.CTB_SMS_HISTORY
    WHERE   id = '51684'
    

    【讨论】:

      猜你喜欢
      • 2021-11-10
      • 2020-04-15
      • 1970-01-01
      • 2022-12-11
      • 2019-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-17
      相关资源
      最近更新 更多