Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Datenbank-Feld mit Textinhalt in Spalten umwandeln

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von Rosapinguin, 24 Januar 2013.

  1. Rosapinguin

    Rosapinguin Benutzer

    Hallo zusammen,

    ich habe folgendes Problem. Ich habe eine Tabelle in meiner Datenbank, die wichtige Inormationen in einem Textfeld beinhaltet. Das Format dieses Textfelds ist in diesem Fall ein XML-Format und sieht ungefähr so aus:

    <TESTTABELLE xsi:schemaLocation="http://www.testfirma.de" xmlns="http://www.testfirma.de" xmlns:xsi="http://www.test.org/2001/XMLSchema-instance">
    <Anfrage1><WertA="x" WertB="y" WertC="z"/></anfrage1>
    <Anfrage2><WertD="xx" WertE="yy"</Anfrage2>
    </TESTTABELLE >

    Die Tabelle besteht natürlich aus mehreren Spalten. Die anderen sind "normale" Einzelinformationen, wie gueltigkeit und ID.

    Und ich würde gerne dieses Testfeld irgendwie aufbrechen, sodass ich die Werte für WertA,B,C,D und E in einzelnen Spalten sehen kann.

    WertA || WertB || WertC || WertD || WertE
    x || y || z || xx || yy

    Weiß einer von euch wie ich da verfahren soll, oder ob es überhaupt möglich ist?

    Vielen Dank und beste Grüße
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Soweit ich weiß hat MySQL keinerlei Funktionen für XML-Verarbeitung. PG hat sowas, aber ich bin da auch nicht 'fit' damit und hilft Dir ja eh nicht weiter.
    Ich denke, innerhalb der DB das aufzubrechen ist sicher möglich (Anwendung diverser String-Funktionen), aber sicherlich nicht trivial.
    Ein Ansatz wäre vielleicht in INSERT -TRIGGER, der eben den String da zerlegt und die einzelnen Felder füllt.


    Andreas
     
  3. ukulele

    ukulele Datenbank-Guru

    Dem stimme ich zu. Der Aufwand von einem derartigen Trigger hängt auch stark vom Aufbau deines XML Textfeldes ab. Z.B. bei unterschiedlicher Anzahl von Variablen etc.
     
  4. Rosapinguin

    Rosapinguin Benutzer

    Hmmm..ja hab mir schon gedacht, dass das ganze sicher nicht trivial ist. Ich versteh auch echt nicht warum die DB-Kollgen das so verprogrammiert haben.
    Aber abngesehen, davon dass das ein XML-Feld ist, kann SQL auch insgesamt keine Texte auseinander nehmen. Also wenn es kein XML-Feld wäre und da einfach nur
    "WertA=x, WertB=y, WertC=z" in dem Feld stehen würde..also als normaler Text, ist es dann auch nicht möglich einzelne Werte auszugeben?
     
  5. Rosapinguin

    Rosapinguin Benutzer

    Ach ok, nu hab ichs gecheckt..."TRIGGER" ist auch ein sql befehl. hmm muss ich mal zurechtgoogeln
     
  6. akretschmer

    akretschmer Datenbank-Guru

    Geht schon, geht alles, mit Deinem String da z.B.:

    Code:
    test=*# select split_part(trim(regexp_split_to_table('WertA=x, WertB=y, WertC=z',',')),'=',1) as variable, split_part(trim(regexp_split_to_table('WertA=x, WertB=y, WertC=z',',')),'=',2) as value;
     variable | value
    ----------+-------
     WertA    | x
     WertB    | y
     WertC    | z
    (3 rows)
    
    Mit viel Aufwand geht das auch mit Deinem XML-String. Aber a) bin ich da zu faul und b) hab ich PG, nicht MySQL. Es wäre also eh für Dich nicht brauchbar. PG hat auch direkt XML-Funktionen, wo man in XML-Dokumenten suchen kann, IIRC kann man das sogar mit Indexen machen. Aber ich hab mich damit noch nie beschäftigt, sorry.

    Andreas
     
  7. akretschmer

    akretschmer Datenbank-Guru

    Das ist unwesentlich mehr als nur ein Befehl, es ist eher ein Konzept. Ein TRIGGER ist eine Aktion, die die DB auslöst, wenn ein bestimmtes Ereignis eintritt. Ereignis z.B. Insert oder Update oder Delete eines einzelnen Datensatzes oder einer kompletten Tabelle, Aktion im Sinne einer stored procedure (z.B.), die dann ausgelöst wird.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden