regexp ersatz

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

  • regexp ersatz

    Hallo,

    entschuldigung aber mir ist kein passender Begriff für die SuFu eingefallen für folgendes Problem:

    select...
    where feldname regexp '\D+';

    Gibt es einen Weg der perfomanter ist? Ich möchte also als Ergebnis alle rows die in der spalte feldname entwas anderes stehen haben als eine Zahl. Das "wunderbare" ist, das dies kein INT sondern ein Stringfeld in der Definition ist. Das macht die obengenannte möglichkeit sozusagen unmöglich. Gibt es einen besseren Weg?

    Danke im Vorraus.

  • #2
    hallo,

    du könntest das machen indem du versuchst das Feld in ein integer zu konvertieren und schaust nach ob dies fehlschlägt oder nicht.

    SELECT...
    WHERE CONVERT(feldname, SIGNED INTEGER) IS NULL


    das sollte auf jeden fall schneller sein als ein regex
    signed oder unsigned... das ist hier die Frage

    Kommentar


    • #3
      hmm also ich habe das gerade nochmal getestet

      dabei ist mir aufgefallen, dass CONVERT(feldname, SIGNED INTEGER) eine Zahl halt in integer konvertiert und eine nicht-Zahl in eine (int) 0

      also müsstest du doch soetwas machen:

      Code:
      SELECT...
      WHERE CONVERT(feldname, SIGNED INTEGER) = 0
         AND feldname != '0'
      signed oder unsigned... das ist hier die Frage

      Kommentar


      • #4
        Und bei dem ganzen geteste ist mir nun die perfekte lösung aufgefallen. (nur vllt. nicht ganz sauber)

        Wenn das Feld ein Varchar-Feld ist und du auf einen Integer-Wert überprüfst, so verhält sich Mysql sehr interessant:

        Code:
        SELECT * FROM tabelle WHERE feldname = 0
        gibt dir alle Rows, wo feldname nicht nur rein aus Zahlen besteht.
        signed oder unsigned... das ist hier die Frage

        Kommentar


        • #5
          das ist nicht die Lösung für das Problem denn es werden nur die Datensätze ausgegeben deren integerwert = 0 ist
          Beantworte nie Threads mit mehr als 15 followups...
          Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

          Kommentar


          • #6
            [Gelöst] regexp ersatz

            Hallo Case,

            danke schonmal für die sehr nützlichen tips. Ich werde es gleich probieren(unsere db ist gerade geblockt durch ne andere Abfrage). Mir ist derweil auch noch was eingefallen:

            Es dauert ja hauptsächlich auch deswegen lange, weil er es auf ein paar Millionen rows ausführt. Dewegen werde ich erst noch ein tempory table machen. Es handelt sich dann nur um ein paar tausend zeilen. Aber vielen Dank für den Tip.

            Da ich neu bin und es entweder in den Forenregeln nicht gesehen oder bisher noch nicht aufgegriffen habe:
            Kann man ein Thema hier als gelöst angeben? Gewohnt bin ich aus anderen Foren mit [Gelöst] im Betreff. Das werde ich auch gleich mal machen. Danke nochmal für die rasche Hilfe.

            Kommentar


            • #7
              Original geschrieben von MelloPie
              das ist nicht die Lösung für das Problem denn es werden nur die Datensätze ausgegeben deren integerwert = 0 ist
              Aber welcher varchar-wert, der keine Zahl ist ist denn nicht 0 ?
              signed oder unsigned... das ist hier die Frage

              Kommentar


              • #8
                Original geschrieben von case
                Aber welcher varchar-wert, der keine Zahl ist ist denn nicht 0 ?
                strings die mit einer ziffer beginnen z.b.
                '42huhu'

                php verhält sich da übrigens auch nicht anders.

                Kommentar


                • #9
                  Moin,

                  wollte nur bescheid geben, dass es mit regexp schon geklappt hat nachdem ich ein subselect rausgenommen hab und gejoint habe anstelle dessen.

                  Kommentar

                  Lädt...
                  X