In meiner Oracle 10g-Datenbank möchte ich "Leerzeichen" (Leerzeichen, Tabulatoren, Wagenrücklauf ...) aus den Werten eines Tabellenfelds entfernen.
Ist TRANSLATE()
der Weg zu gehen? Zum Beispiel etwas wie:
MY_VALUE := TRANSLATE(MY_VALUE,
CHR(9) || CHR(10) || CHR(11) || CHR(12) || CHR(13) || ' ', '');
Oder gibt es eine bessere Alternative (etwas wie [:space:]
in PHP PCRE)?
Danke für jeden Ratschlag.
Ich würde mich für regexp_replace entscheiden, obwohl ich nicht 100% sicher bin, dass dies in PL/SQL verwendbar ist
my_value := regexp_replace(my_value, '[[:space:]]*','');
Kürzere Version von:
REGEXP_REPLACE( my_value, '[[:space:]]', '' )
Wäre:
REGEXP_REPLACE( my_value, '\s')
Keine der obigen Anweisungen entfernt "Null" -Zeichen.
Um "Nullen" zu entfernen, umschließen Sie die Anweisung mit einem Ersetzen
So wie:
REPLACE(REGEXP_REPLACE( my_value, '\s'), CHR(0))
Da Sie mit regulären Ausdrücken vertraut sind, möchten Sie wahrscheinlich die Funktion REGEXP_REPLACE verwenden. Wenn Sie alles entfernen möchten, das der POSIX-Klasse [: space:] entspricht
REGEXP_REPLACE( my_value, '[[:space:]]', '' )
SQL> ed
Wrote file afiedt.buf
1 select '|' ||
2 regexp_replace( 'foo ' || chr(9), '[[:space:]]', '' ) ||
3 '|'
4* from dual
SQL> /
'|'||
-----
|foo|
Wenn Sie für jeden Satz fortlaufender Leerzeichen ein Leerzeichen verwenden möchten, fügen Sie dem regulären Ausdruck einfach +
hinzu und verwenden Sie ein Leerzeichen als Ersatzzeichen.
with x as (
select 'abc 123 234 5' str
from dual
)
select regexp_replace( str, '[[:space:]]+', ' ' )
from x
select regexp_replace('This is a test ' || chr(9) || ' foo ', '[[:space:]]', '') from dual;
REGEXP_REPLACE
--------------
Thisisatestfoo
Zum Entfernen von Whitespaces können Sie Folgendes verwenden:
myValue := replace(replace(replace(replace(replace(replace(myValue, chr(32)), chr(9)), chr(10)), chr(11)), chr(12)), chr(13));
Beispiel: alle Leerzeichen in einer Tabelle entfernen:
update myTable t
set t.myValue = replace(replace(replace(replace(replace(replace(t.myValue, chr(32)), chr(9)), chr(10)), chr(11)), chr(12)), chr(13))
where
length(t.myValue) > length(replace(replace(replace(replace(replace(replace(t.myValue, chr(32)), chr(9)), chr(10)), chr(11)), chr(12)), chr(13)));
oder
update myTable t
set t.myValue = replace(replace(replace(replace(replace(replace(t.myValue, chr(32)), chr(9)), chr(10)), chr(11)), chr(12)), chr(13))
where
t.myValue like '% %'
Um ein oder mehrere Leerzeichen durch ein einzelnes Leerzeichen zu ersetzen, verwenden Sie {2,}
anstelle von *
. Andernfalls würden Sie insert
ein Leerzeichen zwischen allen nicht leeren Zeichen verwenden.
REGEXP_REPLACE( my_value, '[[:space:]]{2,}', ' ' )