mist
Goto Top

SQL-Abfrage mit CURDATE

Hallo,
ich habe folgendes Script (Sybase-DB):

select *
from TABELLE
where year(SPALTE) = year(curdate()) 
  and month(SPALTE) = month(curdate())
  and day(SPALTE) = day(curdate())

Dieses zeigt mir das alle Zeilen der Tabelle "TABELLE" an, die das aktuelle Jahr, Monat, Tag in der Spalte "SPALTE" enthalten. Quasi alles, was heute hinzugefügt wurde.
Das funktioniert auch soweit. Jetzt möchte ich mir anzeigen lassen, was heute und gestern+vorgesten hinzugefüht wurde.

Kann mir einer einen Tipp geben, wie ich das umsetzen kann?

Gruß
Michael

Content-Key: 301797

Url: https://administrator.de/contentid/301797

Printed on: April 25, 2024 at 10:04 o'clock

Member: ukulele-7
ukulele-7 Apr 14, 2016 updated at 09:03:48 (UTC)
Goto Top
Das wird beim Monatswechsel schwierig, warum nicht
WHERE cast(curdate() AS DATE) BETWEEN cast(spalte AS DATE) - 3 AND cast(spalte AS DATE)
Member: MiSt
MiSt Apr 14, 2016 at 09:24:21 (UTC)
Goto Top
Stimmt. Das hatte ich nicht berücktsichtigt... Beim Jahr dann bestimmt auch, oder?

Ich bin in SQL nicht so fit. Ich bringe mir das selber ein wenig bei.
Wenn ich deinen Part eintragen, bekomme ich eine Fehlermeldung.
select *
from TABELLE
where cast (curdate() as date) between cast(SPALTE as date) - 3 and cast (SPALTE as date)

poQuery: Error 7200: AQE Error: State = S0000; NativeError = 2159; [iAnywhere Solutions][Advantage SQL Engine]Invalid argument to scalar
function: cast - unrecognized data type: date. -- Location of error in the SQL statement is: 30 (line: 3 column: 7)
Member: Biber
Solution Biber Apr 14, 2016 updated at 09:30:36 (UTC)
Goto Top
Moin MiSt,

da würde ich noch weiter gehen als ukulele-7.
Wenn sicher ist, dass spalte ein Date-Feld ist und evtl auch einen Index drauf liegt:

..WHERE spalte >= curdate() -3
Dann kann der index benutzt werden.

Plan B, der allerdings eine Indexnutzung wegen der CASTerei unmöglich macht:
..WHERE cast(spalte as Date) >= curdate() -3

Grüße
Biber
Member: MiSt
MiSt Apr 14, 2016 updated at 10:38:32 (UTC)
Goto Top
Prima, Danke. Das 1. Beispiel hat funktioniert.

Jetzt würde ich das gerne ausbauen.
Ich möchte nur die Tabellenzeilen sehen, wo SPALTE_2 nur den Zeitraum heute + 2 Wochen anzeigt.
Das habe ich versucht:
select * 
from TABELLE 
where SPALTE >= curdate() -3
 and SPALTE_2 <= curdate() +14 

Und, es hat funktioniert. face-wink

Danke für die Hilfe.