如何在 Select 上替换 Varchar2 中的特定字符

How to Replace a specific char in a Varchar2 on Select

我有一个 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@ 以跳入此处的 'new line'。结果一定是这样的:

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.

CHR(10) 换行

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

干杯

你可以试试这样的

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将放置空格

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

您可以使用 SQL 函数 REPLACE:

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

13和10是CR和LF的ASCII码。

您可以使用 REPLACE。这取决于您 OS 是仅使用 CHR(10) 还是同时使用 CHR(10) 和 CHR(13)。

  • CHR(10) - 换行

  • CHR(13) - 马车 return.

对于windows:

chr(10) || chr(13)

对于大多数其他 OS:

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>