Brauche Hilfe zu Oracle SQL

Hallo zusammen,
vielleicht kann mit hier jmd helfen, wäre dringend.
Also folgendes Problem:

Habe eine Tabelle „Meldung“
Hier gibt es eine Spalte „Vorname“
In dieser Spalte kann folgendes stehen:

  • Max
  • Dr. Max
  • Herr Dr. Max
    Ich möchte jetzt überall wo in dieser Spalte das „Dr.“ vorkommt dieses löschen, wobei aber das „Max“ oder „Herr Max“ dann erhalten bleiben soll.

Ich hoffe auf Hilfe

Nadine

Auch hallo.

Abhängig von der Oracle Version müssten LIKE sowie REGEXP_LIKE die gesuchten Befehle sein: http://www.muniqsoft.de/tipps/monatstipps/monattipp_…
(REGEXP_LIKE erst ab Oracle10)

mfg M.L.

Ist Oracle 9i

Ist Oracle 9i

Hi,

DELETE FROM meldungen
WHERE vorname LIKE '% Dr. %'; 
 

Wäre mal die Spontan-Lösung. Problematisch natürlich bei mehreren Titeln oder auch Schreibvarianten wie: 'Hr.Dr. Blubb', 'Herr DR Blubb'... und so weiter. 

Gruß
Andreas

ok, wer lesen kann is im Vorteil:

UPDATE meldungen
SET vorname = TRIM(REPLACE(vorname,' Dr. ',' '))
WHERE vorname LIKE '% Dr. %';

Du willst ja nicht die Datensätze löschen, sondern nur den Spalteninhalt editieren, wenn ich das richtig verstanden habe.

Gruß
Andreas

Hmmmmm …
Hab das gerade versucht aber da bekomme ich ne Fehlermeldung :frowning:

Weil der Tabellenname falsch ist.
@Andreas, man kann Beiträge auch löschen, leider nur, solange noch niemand geantwortet hat - nun zu spät. Deine erste Version war doch etwas …destruktiv…
Warum nicht so?

UPDATE meldung
SET vorname = REPLACE(vorname,'Dr.','');

und vorher zum Test ein

select REPLACE(vorname,'Dr.','') from Meldung;

Gruß, m.

Weil der Tabellenname falsch ist.

@NadineU60311: Bitte immer die genaue Fehlermeldungen mitposten, sonst ist es ein Ratespiel.

Version war doch etwas …destruktiv…

zugegebener Maßen - ja war sie; hatte beim Anfangspost statt „dieses löschen“ - „diese Löschen“ gelesen; wollte aber dennoch die Möglichkeit stehen lassen, die Datensätze komplett zu löschen - rein zu Informationszwecken.

Warum nicht so?
UPDATE meldung
SET vorname = REPLACE(vorname,‚Dr.‘,’’)
und vorher zum Test ein
select REPLACE(vorname,‚Dr.‘,’’) from Meldung;

Weil aus "Herr Dr. Max" dann "Herr Max" statt "Herr Max" wird (hoffe man sieht den Unterschied der 2 Leerzeichen). 

Gruß
Andreas

trim() entfernt nur Leerzeichen von Anfang und vom Ende des Gesamtstrings, das reicht nicht, und die where-Klausel ist falsch (eigentlich auch überflüssig), weil du dich nicht auf die Leerzeichen vor dem ‚Dr.‘ verlassen kannst.
Also folgenden Vorschlag:

UPDATE meldung
SET vorname = TRIM(REPLACE(REPLACE(vorname,'Dr.',''),' ',' '));
  • muzel

Hallo zusammen,

Weil aus „Herr Dr. Max“ dann „Herr Max“ statt „Herr Max“ wird
(hoffe man sieht den Unterschied der 2 Leerzeichen).

Was mit einer weiteren Verwendung von
UPDATE meldung
SET vorname = REPLACE(REPLACE(vorname,‚Dr.‘,’’),’ ‚,‘ ‚)
bzw.
select REPLACE(REPLACE(vorname,‚Dr.‘,‘’),’ ‚,‘ ') from Meldung;

ändern könnte (bei ersten Mal 2 Leerzeichen, bei zweiten Mal nur 1 Leerzeichen).

@Nadine> Falls Du noch mehr als den Dr. entfernen muss, vielleicht hilft ein Blick auf http://www.familieverweyen.de/txt_0020.htm.

MfG Georg V.

where-Klausel ist
falsch

korrekt

(eigentlich auch überflüssig)

Die erfüllt schon einen Sinn, da sie das Potential hat erheblich Performance bringen, je nach Geasmtvolumen und relativer Häufigkeit der Datensätze mit "Dr. "

Jens