Martin Weber: Problem mit SQL-Like Befehl

Hallo,

ich habe eine Tabelle mit mehreren Feldern.

my_Users(id,name,birthdate)

Es gibt einen User mit dem namen "Username"

wenn ich jetzt eine der  folgenden Abfragen mache, bekomme ich aber leider keine ausgabe zurück:

select * from my_Users where name = 'Username'
select * from my_Users where name like 'Username'

wie muss es richtig heissen? Ich kann ja nicht einfach ein % hintendran machen, dann gibt es mir ja alle User die mit Username anfangen aus o.O

  1. Hallo,

    ich habe eine Tabelle mit mehreren Feldern.
    my_Users(id,name,birthdate)

    Es gibt einen User mit dem namen "Username"

    wenn ich jetzt eine der  folgenden Abfragen mache, bekomme ich aber leider keine ausgabe zurück:

    select * from my_Users where name = 'Username'
    select * from my_Users where name like 'Username'

    wie muss es richtig heissen?

    Richtig sollte es lauten:

      
    SELECT  
        id,  
        name,  
        birthdate  
    FROM  
        my_Users  
    WHERE  
        name = 'Username'  
    
    

    Es ist eine gute Idee, stets die gewünschten Spalten einzeln aufzuführen.

    Wenn Du nun Deinen bestimmten Benutzernamen nicht findest, so könntest Du Dir als erstes mal die vorhandenen Benutzernamen anzeigen lassen:

      
    SELECT DISTINCT  
        name  
    FROM  
        my_Users  
    
    

    Um festzustellen, ob Du nicht vielleicht an irgendwelchen Leerzeichen hängenbleibst, könntest Du feste Zeichenketten vorne- und hintendran hängen. Benutze dazu die Möglichkeiten die Dir Dein (uns unbekanntes) DBMS dafür bietet.

    Freundliche Grüße

    Vinzenz

  2. Hello,

    wie muss es richtig heissen? Ich kann ja nicht einfach ein % hintendran machen, dann gibt es mir ja alle User die mit Username anfangen aus o.O

    hmh,  mir scheint, ich verstehe dein Problem nicht. Entweder, du möchtest eine Wildcardsuche. Wenn dem so ist, dann verwendest du LIKE und platzierst überall dort einen entsprechenden Wildcardausdruck, wo du beliebige(s) Zeichen erlauben willst - spricht % davor oder dahinter um innerhalb der Angabe zu suchen, ? um ein einzelnes Zeichen offen zu lassen.
    Wenn du keine Wildcardsuche nutzen möchtest, dann verwendet = und übergebe direkt den gesuchten Wert.

    Wenn ='Username' nicht auf deine Abfrage anschlägt, dann heißt der User offenbar nicht exakt so. Beachte, dass z.B. MySQL unter Nicht-Windows Groß- und Kleinschreibung unterscheiden könnte.

    Generell sei dir noch die Empfehlung gegeben, SELECT * ausschließlich zu Testzwecken zu verwenden und eigentlich immer die tatsächlichen Spalten anzugeben.

    MfG
    Rouven

    --
    -------------------
    sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
    Buy when there's blood running in the street and sell when everyone is pounding at your door, clawing to own your equities  --  Wisdom on Wallstreet
    1. Hello,

      wie muss es richtig heissen? Ich kann ja nicht einfach ein % hintendran machen, dann gibt es mir ja alle User die mit Username anfangen aus o.O
      hmh,  mir scheint, ich verstehe dein Problem nicht. Entweder, du möchtest eine Wildcardsuche. Wenn dem so ist, dann verwendest du LIKE und platzierst überall dort einen entsprechenden Wildcardausdruck, wo du beliebige(s) Zeichen erlauben willst - spricht % davor oder dahinter um innerhalb der Angabe zu suchen, ? um ein einzelnes Zeichen offen zu lassen.

      Bei MySQL
      http://dev.mysql.com/doc/refman/5.1/en/string-comparison-functions.html#operator_like
      ist es per default der Unterstrich für ein einzelnes Zeichen. Ist das in Standard SQL anders?

      Liebe Grüße aus Syburg bei Dortmund

      Tom vom Berg

      --
      Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de
      1. Hello,

        ist es per default der Unterstrich für ein einzelnes Zeichen.

        da hast du wohl Recht. Ich hab's in meinem ganzen Leben noch kein einziges Mal gebraucht, daher war es ein Schuss ins Blaue. Wobei mich nicht wundern würde, wenn es zumindest das ein oder andere DBMS (in Richtung MSDE schiel; wobei, das kann man nicht für voll nehmen, der nimmt auch * als Wildcard) auch wieder anders macht.

        MfG
        Rouven

        --
        -------------------
        sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
        Eine Bilanz ist wie der Bikini einer Frau. Sie zeigt fast alles, aber verdeckt das Wesentliche  --  Günter Stotz, Regierungsdirektor des baden-württembergischen Wirtschaftsministeriums
        1. echo $begrüßung;

          Wobei mich nicht wundern würde, wenn es zumindest das ein oder andere DBMS (in Richtung MSDE schiel; wobei, das kann man nicht für voll nehmen, der nimmt auch * als Wildcard) auch wieder anders macht.

          Informix beispielsweise kennt neben LIKE mit % und _ noch MATCHES mit * und ?.

          echo "$verabschiedung $name";

    2. echo $begrüßung;

      Wenn ='Username' nicht auf deine Abfrage anschlägt, dann heißt der User offenbar nicht exakt so. Beachte, dass z.B. MySQL unter Nicht-Windows Groß- und Kleinschreibung unterscheiden könnte.

      Windows oder nicht hat nur Auswirkungen auf Datenbank- und Tabellennamen. Feldinhalte unterliegen in Punkto Case Sensitivity dem Kollationswert. xxx_yyy_ci versus xxx_yyy_cs oder xxx_bin. Case-sensitive Vergleiche auch bei _ci-Kollationen bekommt man mit dem BINARY-Operator.

      echo "$verabschiedung $name";

      1. Hello,

        Feldinhalte unterliegen in Punkto Case Sensitivity dem Kollationswert. xxx_yyy_ci versus xxx_yyy_cs oder xxx_bin.

        ui, richtig, da war was...

        Windows oder nicht hat nur Auswirkungen auf Datenbank- und Tabellennamen

        ...was ich eigentlich nicht gut finde, wobei es Gewöhnung sein könnte. Noch anders ist da wieder SQL-Server, bei dem es offenbar wieder von der Kollation der Datenbank abhängt

        MfG
        Rouven

        --
        -------------------
        sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
        I will never understand why Germans feel the need to kill trees  --  Arbeitskollege aus UK zum Thema ob eine Dokumentation elektronisch oder auf Papier ausgeliefert wird
        1. echo $begrüßung;

          Windows oder nicht hat nur Auswirkungen auf Datenbank- und Tabellennamen
          ...was ich eigentlich nicht gut finde, wobei es Gewöhnung sein könnte. Noch anders ist da wieder SQL-Server, bei dem es offenbar wieder von der Kollation der Datenbank abhängt

          MySQL verwendet (zumindest für MyISAM) diese Namen für das Verzeichnis (Datenbank) und die Dateien (Tabellen). Deswegen gelten da auch noch betriebssystemabhängige Einschränkungen bei den verfügbaren Zeichen. Wenn ich mich recht erinnere nimmt der MSSQL-Server eine oder mehrere Dateien pro Datenbank. Die Tabellennamen sind dann Inhalt und unterliegen keinen Dateisystembeschränkungen. Der Datenbankname dürfte auch noch mal extra gepflegt sein und nicht nur als Dateiname existieren.

          echo "$verabschiedung $name";