[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    May 2011
    Beiträge
    3

    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.

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    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.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    May 2011
    Beiträge
    3
    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?

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    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) ...
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  5. #5
    Registriert seit
    May 2011
    Beiträge
    3
    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?

  6. #6
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    ... 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!!!
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

Similar Threads

  1. 4 gepackte Felder in ein DATE Feld für SQL Abfrage
    By cicero22 in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 29-10-07, 13:08
  2. FETCH n ROws in einzelne Felder einer DS
    By pedro-zapata in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 11-09-06, 12:34
  3. ILE Feld in Feld ansprechen
    By jogisarge in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 10-05-06, 16:26
  4. Felder mit SQL einer Datenbank hinzufügen!
    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
  •