2016-07-08 12 views

Antwort

0

Ich bin kein Experte in regular expression, aber das kann funktionieren :):

SELECT REGEXP_REPLACE (' and 121630 is part of ABC 9.0.2.0 and 121630 is included in DEF and', 
         '(^\s*and\s*(\s|$))|((^|\s)\s*and\s*$)') 
    FROM DUAL 

EDIT: Für mehr als ein 'und' eine Gruppe machen:

SELECT REGEXP_REPLACE (' and and and 121630 is part of ABC 9.0.2.0 and 121630 is included in DEF', 
         '(^(\s*and\s*)+(\s|$))|((^|\s)(\s*and\s*)+$)') 
    FROM DUAL 
+0

Danke :) Das ist, was ich gesucht habe. Es funktioniert für alle drei Szenarien, die ich erwähnt habe. Aber es gibt wieder ein kleines Problem. Es wird dafür nicht funktionieren. zB: und und 121630 ist und in DEF und enthalten. Ich wollte einfach eine beliebige Anzahl von 'und' Wörtern entfernen, wenn sie als führende oder nachgestellte Wörter vorkommen. Können Sie eine Lösung dafür vorschlagen? Danke :) – user2153047

+0

@ user2153047 Siehe EDIT – Mottor

+0

Warum funktioniert diese Lösung nicht für einen folgenden String? ZB: ', und 121630 ist Teil von ABC 9.0.2.0 und 121630 ist in DEF enthalten, 456 nicht angewendet, und 121628 ist Teil von XYZ, 123 nicht angewendet' – user2153047

0

Sie können die Verwendung der LTRIM und RTRIM Funktionen machen:

declare 
    lString VARCHAR2(1000); 
begin 
    lString := 'and 121630 is part of ABC 9.0.2.0 and 121630 is included in DEF and'; 

    lString := ltrim(lString,'and '); 

    lString := rtrim(lString,' and'); 

    dbms_output.put_line(lString); 
end; 
+0

Warum fügst du den 'LTRIM()' s keinen Platz hinzu? –

+0

Kein Grund außer nicht wirklich darüber nachzudenken, änderte es jetzt :) – Chrisrs2292

1
SQL> with tbl(str) as (
     select 'and 121630 is part of ABC 9.0.2.0 and 121630 is included in DEF and' 
     from dual 
    ) 
    select regexp_replace(str, '^and (.*) and$', '\1') fixed_str 
    from tbl; 

FIXED_STR 
----------------------------------------------------------- 
121630 is part of ABC 9.0.2.0 and 121630 is included in DEF 

SQL> 
+0

Danke @Gary_W, Aber ich habe eine andere Frage. Abgesehen von dieser spezifischen Zeichenfolge , wie man 'vermeidet' und 'Wort', wenn es nur als vorangestelltes und/oder nacheilendes Zeichen bleibt: zB1: und ABC und DEF und XYZ und zB2: und ABC und DEF und XYZ zB3: ABC und DEF und XYZ und Ausgabe für alle drei Beispiele sind: ABC und DEF und XYZ. pls vorschlagen eine Antwort, die für alle drei Szenarien gilt. Danke :) – user2153047

+0

Ich wollte einfach eine beliebige Anzahl von 'und' Wort entfernen, wenn als führende oder nachlaufende auftritt. – user2153047

Verwandte Themen