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

silversurfer2k

Grünschnabel
Hallo,

ich habe jetzt lange getestet und probiert. Jetzt frage ich mal Euch.

DB Infos:
  • Server-Typ: MySQL
  • Server Version: 5.5.54-0+deb8u1 - (Debian)
Ich würde gern Spalte1 auslesen und zwar nur alles nach dem Zeichen "-" und das Ergebnis in Spalte2 schreiben.

Beispiel für Spalte1:
blablasuper-username1
dankedanke-extremuser1
nasowasaberauch-user3

In Spalte2 sollte dann geschrieben werden:
username1
extremuser1
user3

Dieser SQL Befehl kommt der Sache bisher am nähesten:
SQL:
UPDATE `datenbank`.`tabelle` SET `Spalte2` = `Spalte1` REGEXP '[^\-]+$'

Allerdings schreibt er in Spalte2 eine "1", also den Regex Return Code.

Vielen Dank für hilfreiche Antworten.

Gruß Silver
 
Auslesen:
SQL:
SELECT
  SUBSTRING_INDEX(Spalte1, '-', 1) AS Inhalt1,
  SUBSTRING_INDEX(Spalte1, '-', -1) AS Inhalt2
FROM Tabelle;

Update:
SQL:
UPDATE
  Tabelle
SET
  Spalte2 = (
  SELECT SUBSTRING_INDEX(Spalte1, '-', -1) FROM Tabelle
);
 
Zuletzt bearbeitet:
Vielen Dank für Deine Antwort.

Auslesen funktioniert sehr gut. Inhalt2 bringt genau das richtige Ergebnis.

Beim UPDATE erhalte ich aber eine Fehlermeldung:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM (
SELECT SUBSTRING_INDEX(Spalte1, '-', -1) AS Inhalt2 FROM tabelle
) ' at line 5

Was ist eigentlich dieses "t2"?

Ich benutze übrigens phpMyAdmin. Kann es daran liegen?
 
#1093 - You can't specify target table 'tabelle' for update in FROM clause

aber so hat es funktioniert:
SQL:
UPDATE
  Tabelle
SET
  Spalte2 = (
  SELECT SUBSTRING_INDEX(Spalte1, '-', -1)
);

Vielen Dank für Deine Hilfe! :)
 
Ich war nicht ganz aufmerksam :)
Code:
UPDATE
  Tabelle
SET
  Spalte2 = SUBSTRING_INDEX(Spalte1, '-', -1)

sollte eigentlich funktionieren :D
 
Auslesen:
SQL:
SELECT
  SUBSTRING_INDEX(Spalte1, '-', 1) AS Inhalt1,
  SUBSTRING_INDEX(Spalte1, '-', -1) AS Inhalt2
FROM Tabelle;

Hallo zusammen,
ich habe eine ähnliche Frage:
Ich würde gerne einen Bereich zwischen zwei Zeichen auslesen.
Also in Spalte1 steht: "a123b456c789d109"

Ich möchte jetzt die zahlen zwischen "b" und "c" (also "456") in einer separate Spalte stehen haben. DIe Anzahl der Zahlen, die zwischen den beiden Buchstaben steht variiert dabei.

Wäre prima, wenn ihr mir helfen könntet.

Beste Grüße
 
Zuletzt bearbeitet:
Ich muss nochmal eine Frage hinterher schicken:
Falls der Separator nicht vorhanden ist, wird aktuell der komplette Wert des Feldes ausgegeben. ist es möglich das Feld "einfach" leer zu lassen, sofern bspw. der Separator "b" nicht gefunden wird?
 

Neue Beiträge

Zurück