Mustervergleich bei MS SQL7.0
andi123
- datenbank
0 Martin0 andi123
0 Frank Jonas0 Thomas Schmieder0 Andi123
Hallo,
laut SQL-Doku sollte man mit LIKE auch DATETIME-Spalten durchsuchen koennen.
Versuche ich z.B. folgendes Statement
select * from tabelle1 where datum like '%13%'
kommen alle Tabelleneintraege, wo im Datum eine 13 auftaucht.
Auch wenn ich folgende Abfrage mache, erhalte ich korrekt alle Eintraege des Monats Juni:
select * from tabelle1 where datum like '%Jun%'
Ich moechte aber gezielt nach einem Datum suchen und das funktioniert nicht, sollte aber nach der Hilfebeschreibung des SQL-Servers gehen:
select * from tabelle1 where datum like '2002-06-13%'
Kann mir jemand sagen, wie es geht?
Danke Andi
Versuche es mal mit
select * from tabelle1 where datum = '2002-06-13%'
Trotz der Zeit im DateTime sollte ein Vergleich von links nach rechts stattfinden, so dass er nach der letzten Datumsstelle aufhören sollte mit dem Vergleich.
select * from tabelle1 where datum = '2002-06-13%'
Trotz der Zeit im DateTime sollte ein Vergleich von links nach rechts stattfinden, so dass er nach der letzten Datumsstelle aufhören sollte mit dem Vergleich.
Das kann nicht gehen, da man keine Platzhalter verwenden kann, wenn man den Vergleich mit '=' statt mit LIKE macht.
Andi
Hallo Andi,
wenn Du gezielt nach einem Datum suchst und den Wert in einem Lietral in Dein Statement einbaust, dann muß Du die Formatierung verwenden, die am Server eingestellt ist. Schau mal nach, ob die Deiner angegebenen entspricht. Falls Du die Möglichkeit zur Verwendung von Bindvariablen hast solltest Du diese verwenden. Das ist hinsichtlich der Formatierung unproblematischer.
HTH
Gruß Frank
Hallo Andi,
laut SQL-Doku sollte man mit LIKE auch DATETIME-Spalten durchsuchen koennen.
Versuche ich z.B. folgendes Statement
select * from tabelle1 where datum like '%13%'
kommen alle Tabelleneintraege, wo im Datum eine 13 auftaucht.
Auch wenn ich folgende Abfrage mache, erhalte ich korrekt alle Eintraege des Monats Juni:
select * from tabelle1 where datum like '%Jun%'
Ich moechte aber gezielt nach einem Datum suchen und das funktioniert nicht, sollte aber nach der Hilfebeschreibung des SQL-Servers gehen:
select * from tabelle1 where datum like '2002-06-13%'
nach meiner Literatur werden die Datentypen Datetime und Smalldatetime intern als Referenzzahl gespeichert, Der Datumsanteil seit dem 01.01.1900 als Tagesnummer (1,5Byte) und die Zeit als Sekunden seit Mitternacht (2,5 byte) bzw Minuten bei Smalldatetime (1,5 Byte). Diese merkwürdige Datumsdarstellung stammt wohl noch aus der Zeit, als Speicherplatz knapp war und man mit HighNibble und LowNibble gearbeitet hat (DOS 2.0 FAT 12).
Die Auflösung findet erst beim Ansprechen des Feldes statt. Da rechnet der Server dann alle möglichen Schablonen aus und vergleicht die von Dir übergebene damit. Demnach müßte man also auch vorne ein % setzen.
Es müßte also keine Jahreszahl gt 5995 möglich sein.
Probiers mal aus.
Tom
Ich moechte aber gezielt nach einem Datum suchen und das funktioniert nicht, sollte aber nach der Hilfebeschreibung des SQL-Servers gehen:
select * from tabelle1 where datum like '2002-06-13%'
die von Dir übergebene damit. Demnach müßte man also auch vorne ein % setzen.
Hm, danke erst mal fuer die Antwort, aber auch dies geht nicht.
Es werden einfach 0 Reihen zurueckgeliefert.
Wenn ich mir das Datumsfeld anschaue so hat das in der Ausgabe folgendes Format:
2002-06-13 00:00:32.000
Es ist auch komisch, da die Abfrage, wie in der Doku beschrieben ist, schon nicht funktioniert.
Naja, ich werd mir jetzt irgendwas zusammenbasteln mit DATEPART(yearofday,...).
Ist zwar umstaendlich, aber es soll halt funktionieren :-)
Danke Andi
Hallo,
Hm, danke erst mal fuer die Antwort, aber auch dies geht nicht.
Es werden einfach 0 Reihen zurueckgeliefert.
Wenn ich mir das Datumsfeld anschaue so hat das in der Ausgabe folgendes Format:
2002-06-13 00:00:32.000
Es ist auch komisch, da die Abfrage, wie in der Doku beschrieben ist, schon nicht funktioniert.
Naja, ich werd mir jetzt irgendwas zusammenbasteln mit DATEPART(yearofday,...).
alternativ könntest Du die convert()-Funktion benutzen um das Datum in einen String umzuwandeln, der dann das format benutzt, das Du auch bei dem String-Literal benutzt hast.
Grüße
Klaus