View Full Version : Select Abfrage now() läuft auf Fehler
Hallo,
ich habe in MS Access 2003 eine Tabellenverknüpfung auf eine AS400 Datei per ODBC, hier frage ich unter anderen ein
Datums-Feld ab (BMDTEE, Datentyp=numeric, Länge=8) was auch
funtioniert mit der Direkteingaben (BMDTEE <= '20111231') oder mit BETWEEN, jetz möchte ich aber die Abfrage aber mit Heute (now()) bzw. Heute -5 .Die Fehlermeldung ist: ...Operanden des Vergleichsoperators = sind nicht kompatibel. (#-401)
Wer kann mir hier weiterhelfen???
andreaspr@aon.at
14-11-12, 06:59
Hallo,
entweder konvertierst die Zahl in ein Datum oder umgekehrt.
Ich würde allerdings ersteres bevorzugen.
Die Konvertierung hängt dann auch noch vom Datumsformat ab welches bei dir eingestellt ist.
Z.B. CCYY-MM-DD oder DD-MM-YY usw.
WHERE current date = date('2012-11-14')
lg Andreas
Hallo Andreas,
stehe gerade ein bischen auf dem Schlauch :confused: , ich bin noch Amateur in
diesem Bereich mein Format sieht so aus (CCYY-MM-DD) z.Bsp.
where BMDTEE <= '20111231' Was muss ich nun genau tun, damit ich
nur die Daten von Heute angezeigt bekomme??
Ich muss das dann fest für die User abspeichern!!
Danke
andreaspr@aon.at
14-11-12, 07:56
Du musst die Abfrage so bauen, dass sie dann wie folgt aussieht:
WHERE date('2012-11-14') <= current date
Das kannst du z.B. so machen:
where current date >=
date (left(char(BMDTEE ), 4) Concat '-' concat
Substring(char(BMDTEE ), 5, 2) Concat '-' concat
right(trim (char(BMDTEE )), 2))
lg Andreas
Ein Datum ist ein Datum und weder ein numerischer Wert noch ein alphanumerischer Wert.
SQL ist jedoch so schlau, dass es einen alphanumerischen Wert in einem der folgenden Formate 'JJJJ-MM-TT', 'TT.MM.JJJJ' oder 'MM/TT/JJJJ' als Datum interpretieren und mit einem Datum vergleichen kann.
Mit der Funktion DATE kann allerdings auch ein alphanumerischer String im Format 'JJJJMMTTHHMMSS' (ohne Trennzeichen) in ein echtes Datum konvertiert werden.
Ein Datum im Format JJJJMMTT kann SQL nicht erkennen und nicht (mit der Funktion DATE()) konvertieren.
Vorausgesetzt Dein numerisches Datum ist im Format JJJJMMTT, kann die Abfrage wie folgt aussehen:
Select *
From YourTable
Where Date(Digits(NumDatum) concat '000000')) = Current_Date;
Birgitta
@Andreas
Nimm lieber DIGITS statt CHAR!
CHAR entfernt führende Nullen und richtet linksbündig aus und könnte somit zu unliebsamen Überraschungen führen.
Birgitta
andreaspr@aon.at
14-11-12, 09:03
@Andreas
Nimm lieber DIGITS statt CHAR!
CHAR entfernt führende Nullen und richtet linksbündig aus und könnte somit zu unliebsamen Überraschungen führen.
Stimmt, bei CHAR muss man noch ein TRIM dazu setzen.
DIGITS ist ein guter Tipp! :)
Hallo,
erstmal Vielen Dank für Euren regen Einsatz und die vielen Tipps, finde ich echt Klasse, mein Problem ist leider noch nicht ganz gelöst. Ich habe jetzt zwar die Spalte "date", die ich auch sortieren kann, aber das ich nur die Ansicht eines Tages (aktuellen Tag am besten now()!!!) bekomme ich nicht hin, ich habe immer noch alle Datensätze, hier der Code:
select bmfirm, bmiden, bmidv, bmprnr, bmqkz, bmqsta,
bmort, bmber,
bmbmen, bmvmen, bmrmen, bmlm, bmmlm,
bmlenr, bmzule, bmbst1, bmbstp,
bmwenr, bmwepo, bmdtdc, bmdtee,
(left(DIGITS(BMDTEE ), 4) Concat '-' concat
Substring(DIGITS(BMDTEE ), 5, 2) Concat '-' concat
right(trim (DIGITS(BMDTEE )), 2))date
from birdatv6.pbestlo
WHERE current date = date('2012-11-14')
order by date DESCWo liegt mein Fehler???
andreaspr@aon.at
14-11-12, 09:58
Ich glaube du hast uns da etwas missverstanden.
Die Anweisung sollte wie folgt aussehen:
select bmfirm, bmiden, bmidv, bmprnr, bmqkz, bmqsta,
bmort, bmber,
bmbmen, bmvmen, bmrmen, bmlm, bmmlm,
bmlenr, bmzule, bmbst1, bmbstp,
bmwenr, bmwepo, bmdtdc, bmdtee,
from birdatv6.pbestlo
WHERE Date(Digits(BMDTEE ) concat '000000')) = Current Date
order by bmdtee DESC
Das Tagesdatum ist ja auch der 14.11.2012.
Wenn Du also selektierst
Where Tagesdatum = 14.11.2012 bekommst Du auch alle Datensätze.
Birgitta