Dominik: SQL-Abfrage "LIKE" nur Zahlen ...

Hallo,

ich hab ein einer SQL Abfrage als Filter das ABC gesetzt - kann also durch Klicken auf "A" alle Namen aus einer Datenbank ausgeben, die mit "A" beginnen.

SELECT  * FROM  daten WHERE name LIKE  'a%'

Gibt es hier eine Möglichkeit eine Abfrage zu machen wo alle Namen ausgegeben werden die mit einer beliebigen Zahl beginnen?

Also: SELECT  * FROM  daten WHERE name LIKE  '0-9%'

oder muss ich da für jede Zahl eine Extra Abfrage machen?

Vielen Dank!

Grüße,
Dominik

  1. Huhu Dominik

    Gibt es hier eine Möglichkeit eine Abfrage zu machen wo alle Namen ausgegeben werden die mit einer beliebigen Zahl beginnen?

    Welcher Name fängt den mit einer Zahl an?

    Ok, es gibt 007, die 7Zwerge, 1tein und vermutlich noch ein paar andere ;-)

    Du kannst das z.B. mit "REGEXP" lösen, ungefähr so

    ... WHERE theName REGEXP '[1]' ...

    http://dev.mysql.com/doc/mysql/en/regexp.html

    oder mit "substring", ungefähr so

    ... WHERE substring(theName,0,1) IN ('0', '1', '2' , ... , '9') ...

    http://dev.mysql.com/doc/mysql/en/string-functions.html

    mehr fällt mir zumindest im Moment nicht ein.

    Mmmmh, wäre mal interessant zu testen welche Variante wohl schneller ist

    Viele Grüße

    lulu

    --
    bythewaythewebsuxgoofflineandenjoytheday

    1. 0-9 ↩︎

    1. Hey Lulu,

      Cool! Danke für die schnelle Antwort. Hm ... ein Name fängt nicht mit einer Zahl an, aber in dem Feld stehen unter anderem auch Firmennamen.

      Deshalb wäre folgende Abfrage sogar noch besser:

      WHERE name "beginnt mit alles ausser A-Z"

      dann wären Sonderzeichen usw. auch mit eingeschlossen. Gibt es da auch eine Lösung für?

      Habe mal Lösung 1 getestet. Das scheint zu funzen. Aber für nen Speedtest sind meine daten noch zu gering :(

      VIELEN DANK!

      Dominik

      1. yo,

        dann wären Sonderzeichen usw. auch mit eingeschlossen. Gibt es da auch eine Lösung für?

        ja, du benutzt entweder reguläre ausdrücke oder aber anstelle von IN den NOT IN Operator quasi das erste zeichen nicht von A-Z, wobei man dabei auch noch die upper funktion in betracht ziehen sollte, damit klein und grossschreibung keine rolle spielt.

        Habe mal Lösung 1 getestet. Das scheint zu funzen. Aber für nen Speedtest sind meine daten noch zu gering :(

        die frage ist, welches dbms du benutzt, sicherlich mysql. und dann ist die frage, ob du einen geeigneten index gesetzt hast. spalten, die in der where klausel abgefragt werden, sind immer gute kandidaten dafür. was allerdings auch gut sein kann, dass durch die verwendung von funktionen der index unter mysql ausgehebelt wird, da es keine funktionalen indexe kennt.

        Ilja

  2. Hi,

    Gibt es hier eine Möglichkeit eine Abfrage zu machen wo alle Namen ausgegeben werden die mit einer beliebigen Zahl beginnen?

    also alle Strings, die größer als '0' und kleiner als ':' sind.

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    Schreinerei Waechter
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.