daniel g: MySql - Spalte = Anfang_des_Strings

Hallo Selfer,

habe eine MySql-Tabelle mit einer Spalte nennen wir sie spalte.
In dieser stehen Werte wie:
ha4ujk93
ha4ujk9358
ha4u

Jetzt habe ich als "Suchstring" z.B. ha4ujk.
Ich möchte nun alle Spalten, in denen der Wert mit ha4ujk beginnt, also er muss am Anfang stehen, was danach kommt ist mir egal.

Wie realisiere ich das?

Gruß

  1. P.S.: Was ich vergessen habe.

    Der Suchstring kann auch länger als die längste Spalte sein.

    Also ha4ujk9358blabla

    Dann sollen in dem Beispiel die 3 Einträge gefunden werden.

    Gruß

    1. Mahlzeit daniel g,

      Der Suchstring kann auch länger als die längste Spalte sein.

      Also ha4ujk9358blabla

      Dann sollen in dem Beispiel die 3 Einträge gefunden werden.

      Das ist aber eine andere Anforderung als die, die Du genannt hast:

      Ich möchte nun alle Spalten, in denen der Wert mit ha4ujk beginnt

      Außerdem ist sie IMHO wenig sinnvoll: Du willst also auch Einträge finden, die NICHT den Suchbegriff enthalten, sondern nur Teile des Suchbegriffs?

      Was genau willst du?

      MfG,
      EKKi

      --
      sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
      1. Hallo,

        danke erstmal für die Antwort.

        Also die Spalte enthält irgendwelche Strings.
        Letztendlich brauche ich ein "gestaffeltes" Ergebnis:

        • falls es eine Zeile gibt, in der die Spalte genauso lautet wie der Suchstring, brauche ich nur diese (LIKE)
        • ist dies nicht der Fall brauche ich die zeilen, die so beginnen, wie der suchstring und diese nach länge geordnet.

        z.B. Ich suche in folgenden Zeilen nach hallo
        ha
        hall

        Da keine Zeile = hallo, werden hall und ha und zwar in dieser Reihenfolge geliefert.

        Gruß

        1. Hallo Daniel,

          Also die Spalte enthält irgendwelche Strings.
          Letztendlich brauche ich ein "gestaffeltes" Ergebnis:

          • falls es eine Zeile gibt, in der die Spalte genauso lautet wie der Suchstring, brauche ich nur diese (LIKE)
          • ist dies nicht der Fall brauche ich die zeilen, die so beginnen, wie der suchstring und diese nach länge geordnet.

          Du solltest Dir den CASE-Operator ansehen.

          z.B. Ich suche in folgenden Zeilen nach hallo
          ha
          hall

          Den zweiten Fall könntest Du mit einem logischen ODER abhandeln.

          Da keine Zeile = hallo, werden hall und ha und zwar in dieser Reihenfolge geliefert.

          CHAR_LENGTH() sollte Dir dabei helfen - und liefert auch bei UTF-8 das gewünschte Ergebnis im Gegensatz zu LENGTH().

          Freundliche Grüße

          Vinzenz

          1. Hallo,

            vielen Dank für deinen Tip.

            Allerdings bin ich echt zu blöd die Doku richtig umzusetzen.
            Für was ich den CASE brauche ist mir klar, aber wie Teste ich, ob die Spalte wie der Suchstring beginnt?

            Außerdem bekomme ich die CASE-Sache nicht wirlich hin

            SELECT spalte
            FROM tabelle
            WHERE
              CASE
                WHEN spalte = 'suchstring' THEN spalte = 'suchstring'
                ELSE spalte_gleich_dem_anfang_des_suchstrings

            Gruß

            1. Hallo,

              habe da was, aber das ist ja nicht, was ich möchte, ich möchte ja sofern es eine zeile gibt, in der spalte = 'suchstring' nur dieses Ergebnis erhalten.
              Nut falls das der Fall ist alle Zeilen in denen Spalte mit dem Anfang des suchstrings übereinstimmt - das ist natürlich so mit den % nicht das gewünschte, da ich nicht weiß, wie ich es umsetzten kann.

              SELECT spalte
              FROM tabelle
              WHERE
                CASE
                  WHEN spalte = 'suchstring' THEN spalte = 'suchstring'
                ELSE spalte LIKE '%suchstring%'
                END
              ORDER BY CHAR_LENGTH(spalte) DESC

              Gruß

  2. Mahlzeit daniel g,

    ha4ujk93
    ha4ujk9358
    ha4u

    Jetzt habe ich als "Suchstring" z.B. ha4ujk.
    Ich möchte nun alle Spalten, in denen der Wert mit ha4ujk beginnt, also er muss am Anfang stehen, was danach kommt ist mir egal.

    Indem Du die passenden Wildcards verwendest:

    SELECT foo  
      FROM tabelle  
     WHERE foo LIKE 'ha4ujk%'
    

    MfG,
    EKKi

    --
    sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|