【问题标题】:How to Replace a specific char in a Varchar2 on Select如何在选择时替换 Varchar2 中的特定字符
【发布时间】:2015-07-25 18:39:26
【问题描述】:

我有一个VARCHAR2 想要Select,但它太长了。所以,我想把Split它变成这样的多行。

SELECT 'Veuillez adresser toute la correspondance à :  Aktiva2 Service Comptabilité : 30 B rue de la Petite Hollande 59700 Marcq-en-Baroeul Tel : 03 20 20 34 83@RET@IMPORTANT: pour faciliter nos échanges comptables, lors de votre paiement, par chèque et en particulier par virement, merci de rappeler votre n° de client et n° de facture acquittée.@RET@@RET@Paiement comptant sans escompte même en cas de paiement anticipé. Au-delà de 10 jours, une pénalité de 3 fois le taux d''intérêt légal (Loi 2008-776 du 04 août 2008) sera appliquée, calculée au prorata temporis sur la valeur de facture.  @RET@@RET@Conforment à la loi du 29 février 2012 le montant de l''indemnité forfaitaire pour frais de recouvrement est de 40 euros dans le cas où les sommes dues sont réglées après la date de règlement figurant sur la facture.'
FROM dual

现在我想将 @RET@ 替换为可以在此处跳转到“新行”的内容。结果一定是这样的:

Veuillez adresser toute la correspondance à :  Aktiva2 Service Comptabilité : 30 B rue de la Petite Hollande 59700 Marcq-en-Baroeul Tel : 03 20 20 34 83

IMPORTANT: pour faciliter nos échanges comptables, lors de votre paiement, par chèque et en particulier par virement, merci de rappeler votre n° de client et n° de facture acquittée.

Paiement comptant sans escompte même en cas de paiement anticipé. Au-delà de 10 jours, une pénalité de 3 fois le taux d''intérêt légal (Loi 2008-776 du 04 août 2008) sera appliquée, calculée au prorata temporis sur la valeur de facture. 
<p>Conforment à la loi du 29 février 2012 le montant de l''indemnité forfaitaire pour frais de recouvrement est de 40 euros dans le cas où les sommes dues sont réglées après la date de règlement figurant sur la facture.

【问题讨论】:

    标签: sql oracle replace newline


    【解决方案1】:

    你可以试试这样的

    declare text varchar2(1000);
    begin
    SELECT 'Veuillez adresser toute la correspondance à :  Aktiva2 Service Comptabilité : 30 B rue de la Petite Hollande 59700 Marcq-en-Baroeul Tel : 03 20 20 34 83@RET@IMPORTANT: pour faciliter nos échanges comptables, lors de votre paiement, par chèque et en particulier par virement, merci de rappeler votre n° de client et n° de facture acquittée.@RET@@RET@Paiement comptant sans escompte même en cas de paiement anticipé. Au-delà de 10 jours, une pénalité de 3 fois le taux d''intérêt légal (Loi 2008-776 du 04 août 2008) sera appliquée, calculée au prorata temporis sur la valeur de facture.  @RET@@RET@Conforment à la loi du 29 février 2012 le montant de l''indemnité forfaitaire pour frais de recouvrement est de 40 euros dans le cas où les sommes dues sont réglées après la date de règlement figurant sur la facture.'
    into text from dual;
    select REPLACE(text,'@RET@',chr(10)) into text from dual;
    insert into testtable (col_text) values(text);
    end;
    /
    

    这个选择会放置空格

    select REPLACE(text,'@RET@',chr(10)) into text from dual;
    

    【讨论】:

    • 我可以同时进行 2 次替换吗?
    • select REPLACE(text,'@RET@',chr(10) && text,'@SAMTHING@','otherThing') 到文本中;
    • @Moudiz - 当你可以用普通的 SQL 做 PL/SQL 时,为什么要这样做?
    • 我想直接在 select 上做
    • @LalitKumarB 虽然你的回答很简单而且很好,但我对 pl sql 更熟悉
    【解决方案2】:

    CHR(10) 是一个新行

    所以REPLACE(text,'@RET@',chr(10))

    干杯

    【讨论】:

      【解决方案3】:

      可以使用SQL函数REPLACE

      replace(your_column, '@RET@', chr(13) || chr(10))
      

      13 和 10 是 CR 和 LF 的 ASCII 码。

      【讨论】:

        【解决方案4】:

        您可以使用 REPLACE。是仅使用 CHR(10) 还是同时使用 CHR(10) 和 CHR(13) 取决于您的操作系统。

        • CHR(10) - 换行

        • CHR(13) - 回车。

        对于窗户:

        chr(10) || chr(13)

        对于大多数其他操作系统:

        chr(10)

        例如在我的windows机器上:

        SQL> set linesize 100
        SQL> WITH DATA AS(
          2  SELECT 'Veuillez adresser toute la correspondance à :  Aktiva2 Service Comptabilité : 30 B rue de la Petite Hollande 59700 Marcq-en-Baroeul Tel : 03 20 20 34 83@RET@IMPORTANT: pour faciliter nos échanges comptables,
         lors de votre paiement, par chèque et en particulier par virement, merci de rappeler votre n° de client et n° de facture acquittée.@RET@@RET@Paiement comptant sans escompte même en cas de paiement anticipé. Au-delà de 1
        0 jours, une pénalité de 3 fois le taux d''intérêt légal (Loi 2008-776 du 04 août 2008) sera appliquée, calculée au prorata temporis sur la valeur de facture.  @RET@@RET@Conforment à la loi du 29 février 2012 le montant
        de l''indemnité forfaitaire pour frais de recouvrement est de 40 euros dans le cas où les sommes dues sont réglées après la date de règlement figurant sur la facture.' str
          3  FROM dual
          4  )
          5  SELECT REPLACE(str, '@RET@', chr(10)) text FROM DATA;
        
        TEXT
        ----------------------------------------------------------------------------------------------------
        Veuillez adresser toute la correspondance à :  Aktiva2 Service Comptabilité : 30 B rue de la Petite
        Hollande 59700 Marcq-en-Baroeul Tel : 03 20 20 34 83
        IMPORTANT: pour faciliter nos échanges comptables, lors de votre paiement, par chèque et en particul
        ier par virement, merci de rappeler votre n° de client et n° de facture acquittée.
        
        Paiement comptant sans escompte même en cas de paiement anticipé. Au-delà de 10 jours, une pénalité
        de 3 fois le taux d'intérêt légal (Loi 2008-776 du 04 août 2008) sera appliquée, calculée au prorata
         temporis sur la valeur de facture.
        
        Conforment à la loi du 29 février 2012 le montant de l'indemnité forfaitaire pour frais de recouvrem
        ent est de 40 euros dans le cas où les sommes dues sont réglées après la date de règlement figurant
        sur la facture.
        
        
        SQL>
        

        【讨论】:

          猜你喜欢
          • 2012-11-09
          • 1970-01-01
          • 1970-01-01
          • 2017-11-23
          • 2014-01-22
          • 1970-01-01
          • 2021-05-26
          • 1970-01-01
          • 2021-08-23
          相关资源
          最近更新 更多