Datumsvergleich mit SQL
Maresa P.
- datenbank
0 Cheatah0 Frank (no reg)0 Kadir
Hallo,
ich möchte in einer SQL Query folgendes abfragen:
SELECT * FROM tabelle WHERE datum > 2004-10-10
Die Spalte Datum ist vom Typ date.
Leider funktioniert die Query aber nicht richtig. Ich bekomme grundsätzlich immer alle Datensätze angezeigt, egal ob das hinterlegte Datum größer oder kleiner als 2004-10-10 ist.
Frage: Lautet die Syntax für einen Datumsvergleich in SQL anders?
Wenn ja, wie?
Vielen Dank für Euere Hilfe
Maresa
Hi,
SELECT * FROM tabelle WHERE datum > 2004-10-10
Die Spalte Datum ist vom Typ date.
1984 (also 2004 minus 10 minus 10) ist es aber nicht.
Cheatah
Hi,
Hallo Cheatah,
SELECT * FROM tabelle WHERE datum > 2004-10-10
Die Spalte Datum ist vom Typ date.1984 (also 2004 minus 10 minus 10) ist es aber nicht.
Ja, daran hab ich auch schon gedacht und die Query folgenden abgeändert:
SELECT * FROM tabelle WHERE datum > '2004-10-10'
Dann werden aber überhaupt keine Datensätze ausgegeben, obwohl entsprechend gültige vorhanden sind.
Cheatah
lg
Maresa
Hi,
SELECT * FROM tabelle WHERE datum > '2004-10-10'
'2004-10-10' ist ebenfalls kein Datum, sondern ein String.
Cheatah
hi,
SELECT * FROM tabelle WHERE datum > '2004-10-10'
'2004-10-10' ist ebenfalls kein Datum,
wieso nicht?
sondern ein String.
ja, das vielleicht außerdem.
gruß,
wahsaga
Hi,
'2004-10-10' ist ebenfalls kein Datum,
wieso nicht?
weil es bisher nicht in ein solches umgewandelt wurde.
Cheatah
hi,
'2004-10-10' ist ebenfalls kein Datum,
wieso nicht?weil es bisher nicht in ein solches umgewandelt wurde.
geht's auch ausnahmsweise mal im klartext?
eine query der genannten art _funktioniert_ mit mysql auf jeden fall (sofern passende DS vorhanden).
also, ist das rumphilosophirerei deinerseits, oder ernsthafte technische bedenken? ;-)
gruß,
wahsaga
hi,
SELECT * FROM tabelle WHERE datum > '2004-10-10'
funktioniert bei mir problemlos.
Dann werden aber überhaupt keine Datensätze ausgegeben, obwohl entsprechend gültige vorhanden sind.
sicher?
wirklich sicher?
ganz ganz sicher?
dann muss der fehler noch irgendwo anders liegen ...
gruß,
wahsaga
hi,
hi
sicher?
wirklich sicher?
ganz ganz sicher?dann muss der fehler noch irgendwo anders liegen ...
du hast recht! der fehler lag woanders und nun funktioniert alles.
gruß,
wahsaga
besten dank
maresa
Hi,
SELECT * FROM tabelle WHERE datum > 2004-10-10
Die Spalte Datum ist vom Typ date.
1984 (also 2004 minus 10 minus 10) ist es aber nicht.
Mit vielen Grüßen von George Orwells großem Bruder ;-)
cu,
Andreas
Hi,
wenn ich ein SQL DBMS wäre würde ich 2004-10-10 zu 1984 evaluieren,
dein gesamtes SQL würde dann theoretisch lauten
SELECT * FROM tabelle WHERE datum > 1984
Und das scheint bei allen deinen Datensätzen der Fall zu sein.
Wenn dein DBMS Datumse _intern_ als integer für jede Sekunde
ab dem 1.1.1900 00:00:00 abspeichert und in Abfragen die
Konvertierung implizit vornimmt, dann kommst du mit 1984 Einheiten
nicht sehr weit.
Du solltest dir mal in der Hilfe die richtige Syntax für Datumsabfragen
suchen.
Ciao && Gruß, Frank
Hi,
Wenn dein DBMS Datumse [...]
JIIIAAAAAAARGHHHH!!!!!3 :-)
Der Plural von Datum lautet Daten. Ja, genau, und der Singular von Daten ist Datum - egal welche Bedeutung man den Begriffen sonst noch zuordnen mag.
Sorry, aber das musste mal gesagt werden :-)
Cheatah
hoi!
genau deswegen hab ich "Datumse" benutzt :-)
Gut dass es jetzt (in ein paar Tagen) im Archiv manifestiert wird.
Ciao, Frank
Hi,
Hallo Frank,
wenn ich ein SQL DBMS wäre würde ich 2004-10-10 zu 1984 evaluieren,
dein gesamtes SQL würde dann theoretisch lautenSELECT * FROM tabelle WHERE datum > 1984
Und das scheint bei allen deinen Datensätzen der Fall zu sein.
Wenn dein DBMS Datumse _intern_ als integer für jede Sekunde
ab dem 1.1.1900 00:00:00 abspeichert und in Abfragen die
Konvertierung implizit vornimmt, dann kommst du mit 1984 Einheiten
nicht sehr weit.Du solltest dir mal in der Hilfe die richtige Syntax für Datumsabfragen
Ich habe mir bereits http://dev.mysql.com/doc/mysql/de/Date_and_time_functions.html
durchgelesen. Bin aber nicht auf den richtigen Weg gekommen. Kannst Du mir einen Tipp geben?!
Viele Dank
Maresa
Hi,
ich kenn den MS SQL Server aber das sollte gleich funktionieren (wenn ms sich an die rules hält!)
versuch mal
select * from tblX where datum >= '1.1.2004'
evtl. musst du auf english language anpassen:
select * from tblX where datum >= '1.1.2004'
oder
select * from tblY where datum between '1.1.2004 00:00' and '1.1.2004 23:59'
ja sieht blöd aus, aber das muss man bei datetime glaub ich, bei smalldatetime nicht.
oder:
select * from tblX where year(datum) = 2004 and month(datum) = 1 and day(datum) = 1
das hier sind aber zahlen. du musst unterscheiden zw. zahl und string.
datum ist string
tag, monat und jahr sind zahlen
mfg hoffe ich konnte helfen
Kadir