wake-up-neo.com

Oracle PL/SQL: Entfernen Sie "Leerzeichen" aus einer Zeichenfolge

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.

20
Frosty Z

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:]]*',''); 
37

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))
13
Lord Gordoff

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
7
Justin Cave
select regexp_replace('This is a test   ' || chr(9) || ' foo ', '[[:space:]]', '') from dual;

REGEXP_REPLACE
--------------
Thisisatestfoo
2
ggiroux

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 '% %'
1
Mirko

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,}', ' ' )
0
Marc Martens