2013-05-06 28 views

risposta

20

Non è necessaria la regex. Questo può essere fatto facilmente con i codici ASCII e noioso vecchi TRANSLATE()

select translate(your_column, chr(10)||chr(11)||chr(13), ' ') 
from your_table; 

Questo sostituisce a capo, tabulazione e ritorno a capo con lo spazio.


TRANSLATE() è molto più efficiente del suo equivalente regex. Tuttavia, se il tuo cuore è impostato su tale approccio, dovresti sapere che possiamo fare riferimento ai codici ASCII nella regex. Quindi questa affermazione è la versione regex di quanto sopra.

select regexp_replace(your_column, '([\x0A|\x0B|`\x0D])', ' ') 
from your_table; 

Il tweak è fare riferimento il codice ASCII esadecimale anziché base 10.

+0

Grazie. Ma non voglio usare la funzione translate, invece voglio solo usare il REGEXP. Un modo per farlo era il seguente: selezionare regexp_replace ('Hello' || chr (10) || 'XYZ', '[[: cntrl:]]', '') da doppio; Ora "[[: cntrl:]]" sostituirà tutti i caratteri non stampabili ma volevo sapere come specificare solo "\ n", "\ r" e "\ t". –

+2

TRANSLATE() è molto più efficiente del suo equivalente regex. Allora perché vuoi usare regex? – APC

+2

Questo principio di escape caratteri usando '\ x0A',' \ x0B' ecc., Non funziona per me. Oracle 11g. Qualcuno sa dei motivi per cui? C'è un'impostazione di ottimizzazione per questo? – cartbeforehorse

Problemi correlati