-
Mysql Datenbank Feld in mehrere Felder aufsplitten
Hallo,
hier ein kleiner Ausschnitt aus der relevanten Tabelle:
id = 0000000006
actiontype = 1
datafield = 90000,Manuel
um das `datafield`in zwei Felder aufzusplitten habe ich folgendes Script geschrieben:
Select `actiontype`,
case when instr(`datafield`, ',') > 0
then substr(`datafield`, 1, instr(`datafield`, ',')-1)
else ' '
end as user_id
,
case when instr(`datafield`, ',') > 0 and instr(`datafield`, ',') < length(`datafield`)
then substr(`datafield`, instr(`datafield`, ',') + 1)
else `datafield`
end as first_name
from `interfacetbl`
WHERE actiontype = 1
Die Frage ist, wie splitte ich ein Feld in vier oder mehrere Felder auf, wie zum Beispiel:
id = 0000000006
actiontype = 1
datafield = 90000,Manuel,Weis,printcarrier.com
Die vier neuen Felder mit Inhalt:
user_id = 90000
first_name = Manuel
last_name = Weis
company = printcarrier.com
Vielleicht fällt euch ja etwas dazu ein, ich würde mich sehr über hilfreiche Beiträge freuen!
P.S.: Ich brauche lediglich einen Select den ich dann in eine Prozedur schreiben werde.
-
Also ich denke, im Select selber wird es nicht gehen.
Da du aber sowieso eine Prozedur schreiben willst, kannst du das dann in einer eigenen Schleife durchführen.
INSTR (SQL-Standard POSSTR) unterstützen meist auch einen Startwert.
Je nach dem, welche Sprache dir für die Prozedur zur Verfügung steht, kannst du dann den sprachspezifischen Befehl (falls vorhanden) "split(Feld, Delimiter)" verwenden, der dir dann ein Array zurückliefert.
-
Vielen Dank für die rasche Antwort! Es geht bei der ganzen Sache um den Connect zischen einem Shop-Backend und einem CRM. Die Daten sollen vom Shop-Backend ins CRM laufen.
Dies geschieht allerdings nicht direkt, sondern über eine Interface-Tabelle. Zum jeweiligen actiontype wie z.B. 1 für "Add or Update Kundendaten" werden alle relevanten Kundendaten vom Backend über ein PHP-Script in das `datafield` der Interfacetabelle geschrieben. Anschließend gibt es zwei Möglichkeiten, entweder ich erstelle einen View oder eine Prozedur, auf die ich mit meiner Taskverwaltungssoftware zugreife. Hierfür muss ich wie erwähnt das `datafield` splitten.
Wie ich die Werte trenne ist eigentlich egal, wichtig ist jedoch das alles auf Datenbankebene stattfinden sollte.
Ich bin mit SQL noch nicht so bewandert, wie müsste denn eine mögliche Schleife für diesen Fall in MySQL aussehen?
-
Das Problem hier ist die Variabilität.
Liegen immer 4 Felder vor ?
Kann der INSTR einen Startwert vorgeben ?
Dazu kenne ich den MySQL-Dialekt nicht.
Das 1. Feld
substr(Feld, 1, instr(1, Feld, ',')-1)
Das 2. Feld
substr(Feld, instr(1, Feld, ',')+1, instr(instr(1, Feld, ',')+1, Feld, ',') - instr(1, Feld, ',') - 2)
usw.
Kann der Bereitsteller der Daten das denn nicht in fest formatiert, also mit fester Länge je Einzelwert zur Verfügung stellen ?
Alternativ kannst du ggf. eine SQL-Function erstellen:
create Function MySplit (Index Integer, Feld Varchar(nn))
returns varchar(nn)
und dann über eine Do-Schleife die Werte zerlegen.
Dann kannst du die Funktion im Select verwenden:
select MySplit(1, Feld), MySplit(2, Feld) ...
-
Es liegen immer 4 Felder vor und die Reihenfolge ist immer die Gleiche:
Wert 1 entspricht immer user_id
Wert 2 entspricht immer first_name
Wert 3 entspricht immer last_name
Wert 4 entspricht immer company
`datafield`= user_id,first_name,last_name,company
Ich bin mit SQL noch nicht so bewandert, wie müsste denn eine mögliche Schleife für diesen Fall in MySQL aussehen?
-
... routines (stored proocedures und user defined functions) gibt es bei MySql ab Version 5 - und da gibt es auch ein Handbuch, Tutorials und Beispiele im Web (Mr. google hilft manchmal ungemein!).
... instr(), das du ja bereits kennst, liefert immer das erste vorkommen des Suchstrings, das Ding kann man also auch schachteln.
das sollte eigentlich reichen, ein wenig darf ein Frager auch noch selber machen.
D*B
PS: so einen Krampf vermeidet man durch ein Minimum an Design in seinen Anwendungen!!!
Similar Threads
-
By cicero22 in forum NEWSboard Programmierung
Antworten: 5
Letzter Beitrag: 29-10-07, 13:08
-
By pedro-zapata in forum NEWSboard Programmierung
Antworten: 6
Letzter Beitrag: 11-09-06, 12:34
-
By jogisarge in forum NEWSboard Programmierung
Antworten: 5
Letzter Beitrag: 10-05-06, 16:26
-
By muadeep in forum NEWSboard Programmierung
Antworten: 17
Letzter Beitrag: 23-04-04, 09:37
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks