MYSQL: Regex Match wegschneiden

Tommy57

Erfahrenes Mitglied
Hallo,

ich habe in der Datenbank lauter Namen wie "William J 1832 - 1894". Ich möchte bei allen den hinteren Teil mit einem regulären Ausdruck abschneiden. Mein Problem ist, dass ich keine Möglichkeit für einen Match mit runden Klammern finde.

Gruß, Tommy
 
Moin Tommy,

zwei Dinge verstehe ich nicht in deinem Monolog.
a) wofür brauchst du deiner Meiner Meinung nach bei einem Text "William J 1832 - 1894" einen "Match mit runden Klammern"???
b) wenn du eine Lösung gefunden hast, dann wird das andere FragenstellerInnen mit demselben Problem sicherlich aufmuntern.... das Problem IST also lösbar.

Aber dieser Hinweis ist vielleicht motivierend, doch nicht sehr hilfreich.

Grüße
Biber
 
Hi Biber3,

zu a: wenn ich einen regulären Ausdruck schreibe, kann man für gewöhnlich einen bestimmten Teil ausgeben lassen. Dafür werden runde Klammern verwendet. Damit könnte man zum Beispiel in einem Text bei Telefonnummern die Vorwahl raussuchen oder wie in meinem Beispiel nur den Namen. Aber Standard MySQL kann das scheinbar nicht.

zu b: ich habe in einem total umständlichen Statement von hinten vier Zahlen mit SUBSTRING abgeschnitten.

Code:
@name_tmp := TRIM(name),    -- Variable name_tmp mit Spalte name befuellen

CASE WHEN (RIGHT(@name_tmp, 5) = 'today') THEN @name_tmp := TRIM(SUBSTRING(@name_tmp, 1, CHAR_LENGTH(@name_tmp) - 5)) END,

CASE WHEN (RIGHT(@name_tmp, 6) REGEXP '[0-9]{6}') THEN @name_tmp := TRIM(SUBSTRING(@name_tmp, 1, CHAR_LENGTH(@name_tmp) - 6)) END,
CASE WHEN (RIGHT(@name_tmp, 5) REGEXP '[0-9]{5}') THEN @name_tmp := TRIM(SUBSTRING(@name_tmp, 1, CHAR_LENGTH(@name_tmp) - 5)) END,
CASE WHEN (RIGHT(@name_tmp, 4) REGEXP '[0-9]{4}') THEN @name_tmp := TRIM(SUBSTRING(@name_tmp, 1, CHAR_LENGTH(@name_tmp) - 4)) END,
CASE WHEN (RIGHT(@name_tmp, 3) REGEXP '[0-9]{3}') THEN @name_tmp := TRIM(SUBSTRING(@name_tmp, 1, CHAR_LENGTH(@name_tmp) - 3)) END,
CASE WHEN (RIGHT(@name_tmp, 2) REGEXP '[0-9]{2}') THEN @name_tmp := TRIM(SUBSTRING(@name_tmp, 1, CHAR_LENGTH(@name_tmp) - 2)) END,

CASE WHEN (RIGHT(@name_tmp, 1) = '-') THEN @name_tmp := TRIM(SUBSTRING(@name_tmp, 1, CHAR_LENGTH(@name_tmp) - 1)) END,

CASE WHEN (CONCAT('', RIGHT(@name_tmp, 6)) REGEXP '[0-9]{6}') THEN @name_tmp := TRIM(SUBSTRING(@name_tmp, 1, CHAR_LENGTH(@name_tmp) - 6)) END,
CASE WHEN (CONCAT('', RIGHT(@name_tmp, 5)) REGEXP '[0-9]{5}') THEN @name_tmp := TRIM(SUBSTRING(@name_tmp, 1, CHAR_LENGTH(@name_tmp) - 5)) END,
CASE WHEN (CONCAT('', RIGHT(@name_tmp, 4)) REGEXP '[0-9]{4}') THEN @name_tmp := TRIM(SUBSTRING(@name_tmp, 1, CHAR_LENGTH(@name_tmp) - 4)) END,
CASE WHEN (CONCAT('', RIGHT(@name_tmp, 3)) REGEXP '[0-9]{3}') THEN @name_tmp := TRIM(SUBSTRING(@name_tmp, 1, CHAR_LENGTH(@name_tmp) - 3)) END,
CASE WHEN (CONCAT('', RIGHT(@name_tmp, 2)) REGEXP '[0-9]{2}') THEN @name_tmp := TRIM(SUBSTRING(@name_tmp, 1, CHAR_LENGTH(@name_tmp) - 2)) END,

@name_tmp AS name,    -- bearbeitetes name_tmp als name rausholen
 

Neue Beiträge

Zurück