Zu charindex

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

  • Zu charindex

    Hallo,

    ich habe in meiner MSSQL-Datenbank in einer Spalte folgenden Inhalt

    2048333|0|0|NULL|5|1

    mit

    LEFT (dbo.Logbuch.PrimeKey; CHARINDEX('|'; dbo.Logbuch.PrimeKey) - 1)

    habe ich mir schon den Inhalt vor dem ersten | geholt, jetzt brauche ich
    aber nur die 5 als Ergebnis, bekomme es aber nicht hin.

    Hat jemand einen Tip?
    Vielen Dank

  • #2
    REVERSE(dbo.Logbuch.PrimeKey) => 1|5|NULL

    SUBSTRING_INDEX(REVERSE(dbo.Logbuch.PrimeKey), '|', 2) => 1|5

    REVERSE(SUBSTRING_INDEX(REVERSE(dbo.Logbuch.PrimeKey), '|', 2)) => 5|1

    SUBSTRING_INDEX(REVERSE(SUBSTRING_INDEX(REVERSE(dbo.Logbuch.PrimeKey), '|', 2)), '|', 1) => 5


    Oder einfach richtig normalisieren, dann kommt man nicht in solche Schwulitäten.

    Kommentar


    • #3
      Hallo,

      Kommt jetzt aber eine Fehlermeldung im Management Studio,

      ungültiger oder fehlender Ausdruck


      liegt aber wohl daran das ich mal wieder nicht geschrieben habe
      das in dieser Spalte nicht immer | vorkommem.


      Gruss
      Vielen Dank

      Kommentar


      • #4
        Ja was kommt denn dann in der Spalte so vor?

        Kommentar


        • #5
          Hallo,

          es eigentlich nur 3 Möglichenkeiten.

          1) 2048333|0|0|NULL|5|1

          2) und dann eine 6 oder 7 stellige Ziffer vorne praktisch wie vor dem
          ersten |

          Gruss
          Vielen Dank

          Kommentar


          • #6
            Mit
            PHP-Code:
            $entries explode('|'dbo.Logbuch.PrimeKey); 
            hast du alle Elemente einzeln in einem Array. Nun kannst du ja abfragen, welche existieren und welche nicht.
            Aber eigentlich sollte man hier gar keine solchen Tipps geben, denn dein DB-Design ist für den Mülleimer. Mache zuerst mal eine normalisierte Struktur, dann gibt es gar keine solchen Probleme.
            Gruss
            H2O

            Kommentar


            • #7
              Original geschrieben von netleader
              es eigentlich nur 3 Möglichenkeiten
              Du hast nur zwei genannt und die zweite verstehe ich nicht mal.

              Kommentar


              • #8
                Es kommem einmal diese Einträge mit den | vor

                dann können aber auch eine 6 oder 7 stellige Zahl vorkommen.

                H2O - "dein DB-Design ist für den Mülleimer"

                Sorry aber das DB Design habe ich nicht entworfen,
                musste es so übernehmen
                Vielen Dank

                Kommentar


                • #9
                  Original geschrieben von netleader
                  Es kommem einmal diese Einträge mit den | vor
                  dann können aber auch eine 6 oder 7 stellige Zahl vorkommen.
                  Dann prüfe eben mit IF() ob überhaupt ein | vorkommt. Falls dem so ist, wendest du obigen Ausdruck an, ansonsten ... machst du irgendwas anderes, keine Ahnung was.

                  Sieht dann etwa so aus:
                  Code:
                  SELECT 
                      IF(INSTR(l.PrimeKey, '|') != 0, 
                          SUBSTRING_INDEX(REVERSE(
                                  SUBSTRING_INDEX(REVERSE(l.PrimeKey), '|', 2)), '|', 1),
                          l.PrimeKey) AS PrimeKey, 
                      ...
                  FROM dbo.Logbuch AS l
                  ...
                  Sorry aber das DB Design habe ich nicht entworfen,
                  musste es so übernehmen
                  Kein Grund, es nicht zu ändern.

                  Kommentar


                  • #10
                    Funktionert jetzt wie ich es brauche - DANKE
                    Vielen Dank

                    Kommentar

                    Lädt...
                    X