Problem mit SQL-Like Befehl
Martin Weber
- datenbank
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
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
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
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
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
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";
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";
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
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";