MYSQL: Spalte per Regex auslesen und Ergebnis in andere Spalte schreiben

Naja, du könntes mit locate auf das Vorhandensein prüfen und mit case when eine Abfragestruktur bauen

SQL:
SELECT
   CASE
       WHEN LOCATE('b',num) >0 AND LOCATE('c',num) > 0  
       THEN SUBSTRING_INDEX(SUBSTRING_INDEX(num,'b',-1),'c',1)
       ELSE ''
   END AS extracted
FROM
    ....

Das prüft aber nur, ob beide Trenner vorkommen. Wenn die Reihenfolge wichtig ist muss du das WHEN-Statment leicht anpassen:

SQL:
SELECT
   CASE
       WHEN LOCATE('b',num) >0 AND LOCATE('c',num) > 0   AND LOCATE('b',num) < LOCATE('c',num)
       THEN SUBSTRING_INDEX(SUBSTRING_INDEX(num,'b',-1),'c',1)
       ELSE ''
   END AS extracted
FROM
    .....

in diesem Fall muss b vor c kommen.
 
Naja, du könntes mit locate auf das Vorhandensein prüfen und mit case when eine Abfragestruktur bauen

SQL:
SELECT
   CASE
       WHEN LOCATE('b',num) >0 AND LOCATE('c',num) > 0 
       THEN SUBSTRING_INDEX(SUBSTRING_INDEX(num,'b',-1),'c',1)
       ELSE ''
   END AS extracted
FROM
    ....

Das prüft aber nur, ob beide Trenner vorkommen. Wenn die Reihenfolge wichtig ist muss du das WHEN-Statment leicht anpassen:

SQL:
SELECT
   CASE
       WHEN LOCATE('b',num) >0 AND LOCATE('c',num) > 0   AND LOCATE('b',num) < LOCATE('c',num)
       THEN SUBSTRING_INDEX(SUBSTRING_INDEX(num,'b',-1),'c',1)
       ELSE ''
   END AS extracted
FROM
    .....

in diesem Fall muss b vor c kommen.


Vielen lieben Dank. Ich habe mich für die erste Variante entschieden, die einwandfrei funktioniert.
Danke Dir!

Grüße,
canju
 
Zurück