Ankündigung

Einklappen
Keine Ankündigung bisher.

aus 1 mach 2 (Feldinhalt auf 2 Felder aufteilen)

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • aus 1 mach 2 (Feldinhalt auf 2 Felder aufteilen)

    hallo,

    ich habe ein Feld <name> in dem der Vorname und der Nachname steht.


    Ich möchte nun den vorname aus <name> in das feld <vorname> und

    den nachname aus <name> in das feld <vorname>.

    ´Vorname und Nachhname sind durch ein Leerzeichen getennt.


    Ich brauche also einen update Befehl der das Feld <name> auflöst in <vorname> <nachname>.

    ( Spezialität: ich habe in dieser Tabelle auch zwei timestamp Felder datum1 und datum2 die bei dem Update unberührt bleiben sollen )

    Gruss und danke RITA

  • #2
    Wenn es keine doppelten Vornamen und keine doppelten Nachnamen gäbe,
    würde folgendes funktionieren:
    Code:
    UPDATE tabelle SET
       vorname  = TRIM(SUBSTRING_INDEX(name, ' ', 1)),
       nachname = TRIM(SUBSTRING_INDEX(name, ' ', -1)),
       datum1   = datum1,
       datum2   = datum2
    Allerdings könnte in `name` aber auch folgendes stehen: "Ernst August Pinkelprinz von Hannover".
    Und dann wäre ich mit meinem Latein am Ende,
    weil ich nicht erkennen kann,
    wie man soetwas in Vorname und Name auseindanerpflücken kann.

    ~dilemma~

    Kommentar


    • #3
      Nachtrag:
      eventuell wäre folgendes machbar:
      Code:
      UPDATE tabelle SET
         vorname  = TRIM(SUBSTRING_INDEX(name, ' ', 1)),
         nachname = TRIM(SUBSTRING_INDEX(name, ' ', -1)),
         datum1   = datum1,
         datum2   = datum2
      WHERE
         (LENGTH(name) - LENGTH(REPLACE(name, ' ', ''))) = 1
      Damit würdest du alle Datensätze,
      die nur EINEN Vornamen und EINEN Nachnamen haben,
      korrekt aufteilen.

      Alle anderen Datensätze müsstest du anschließend 'zu Fuß' bearbeiten.

      ~dilemma~

      Kommentar


      • #4
        eine ergänzende Frage

        hallo,

        ... funktioniert prächtig !!

        wenn ich jetzt noch eine Bedingung einfügen möchte

        z.B. where art = 'ja'

        füge ich das zwischen tabelle und dem SET ein

        also

        update tabelle where art = 'ja' SET

        oder setze ich die Bedingung ans Ende ?


        Gruss RITA

        Kommentar


        • #5
          Vermutlich meinst du folgendes:
          Code:
          UPDATE tabelle SET
             vorname  = TRIM(SUBSTRING_INDEX(name, ' ', 1)),
             nachname = TRIM(SUBSTRING_INDEX(name, ' ', -1)),
             datum1   = datum1,
             datum2   = datum2
          WHERE
             (LENGTH(name) - LENGTH(REPLACE(name, ' ', ''))) = 1
              AND
              art = 'ja'
          Du kannst das, was du vorhast, dir vorher so anschauen:
          Code:
          SELECT
             name,
             TRIM(SUBSTRING_INDEX(name, ' ', 1))  AS vorname,
             TRIM(SUBSTRING_INDEX(name, ' ', -1)) AS nachname
          FROM
             tabelle
          WHERE
             (LENGTH(name) - LENGTH(REPLACE(name, ' ', ''))) = 1
              AND
              art = 'ja'
          ~dilemma~

          Kommentar


          • #6
            @ dilemma

            ... vielen Dank für deine prompte Hilfe.

            RITA

            Kommentar


            • #7
              Ein Hinweis noch: Wenn du mit MySQL ab Version 4.1 arbeitest, solltest du CHAR_LENGTH() statt LENGTH() verwenden, weil LENGTH() nur die Größe der Zeichenkette in Byte zurückgibt, CHAR_LENGTH() aber die tatsächliche Länge an Zeichen.

              Kommentar

              Lädt...
              X