SQL Abfrage für Einträge vor zwei Tagen

dengg

Benutzer
Beiträge
8
Hallo
Kann mir jemand sagen, wie ich eine SQL Abfrage mache, die nur Ergenisse liefert, die nicht älter als zwei Tage sind.
Das Datum liegt in der bereits vorhandenen SQL Datenbank in diesem Format vor:

20120802
 
Werbung:

ukulele

Datenbank-Guru
Beiträge
4.394
Code:
SELECT    *
FROM    tabelle
WHERE    datum >= datepart(yyyy,getdate()-2)*10000 + datepart(mm,getdate()-2)*100 + datepart(dd,getdate()-2)
 

dengg

Benutzer
Beiträge
8
Ich hab jetzt versucht ab die Zeile ab datum per && an meine Abfrage anzuhängen. Datum hab ich angepasst. Das heißt in meinem Fall s_date. Es kommt zwar kein Fehler, aber es wird nichts angezeigt. Muss ich datepart auch noch anpassen oder ist das ein SQL Befehl?
SQL Abfrage:
"SELECT * FROM tb_activity WHERE assigned_to = 17 && closed = 'n' && s_date >= datepart(yyyy,getdate()-2)*10000 + datepart(mm,getdate()-2)*100 + datepart(dd,getdate()-2)";

EDIT: Hab gerade in PHPMyAdmin gesehen, dass s_date ein varchar Feld mit 8 Feldern ist. Geht das dann auch?
In meinem Fall brauch ich eigentlich nur ein datepart für den Tag oder?
 

ukulele

Datenbank-Guru
Beiträge
4.394
Der VARCHAR ist das Problem, aber probier mal das:
Code:
SELECT    *
FROM    tb_activity
WHERE    assigned_to = 17
AND        closed = 'n'
AND        isnull(cast(s_date AS INT),0) >= datepart(yyyy,getdate()-2)*10000 + datepart(mm,getdate()-2)*100 + datepart(dd,getdate()-2)
Ich habe && durch AND ersetzt, && habe ich noch nie gesehen und ist auf jedenfall nicht zu allen SQL DBs kompatibel.
cast(s_date AS INT) sollte deinen VARCHAR Wert in INT umwandeln. isnull() fängt dabei mögliche Fehler ab und ersetzt sie durch 0.
Diese Syntax geht unter MS SQL, sollte aber auch unter MySQL klappen.
 

dengg

Benutzer
Beiträge
8
Damit wird ebenfalls nichts ausgegeben. Das && habe ich eigentlich immer verwendet, aber gut zu wissen.
Ich verstehe aber nicht, wieso du mit 10000 bzw. 100 multiplizierst. Ich hab jetzt versucht, den Befehl in PHPMyAdmin auszuführen. Da kommt aber der Fehler: #1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'INT),0) >= datepart(yyyy,getdate()-2)*10000 + datepart(mm,getda
 

ukulele

Datenbank-Guru
Beiträge
4.394
Sry, immer diese Syntax Unterschiede :)
Das multiplizieren mache ich, um die Ziffern an die richtige Stelle zu bekommen. Würde ich die Ziffern erst in Zeichenketten umwandeln und dann verketten, könnten mir Nullen bei Monaten oder Tagen fehlen. Daher rechne ich erst mit Zahlen.
Code:
SELECT    *
FROM    tb_activity
WHERE    assigned_to = 17
AND        closed = 'n'
AND        ifnull(cast(s_date AS INT),0) >= year(now()-2)*10000 + month(now()-2)*100 + day(now()-2)
Wegen dem Monatswechsel ziehe ich von now() (MySQL) bzw. getdate() (MS SQL) erst 2 Tage ab. Ich hoffe MySQL gibt bei SELECT now() - 2 auch Heute minus zwei Tage aus.
http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html
http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html#function_ifnull
 

dengg

Benutzer
Beiträge
8
Hab jetzt gerade das SELECT now() -2 in PHPMyAdmin probiert. Dabei wird 20120803105004 ausgegeben. Also das heutige Datum mit momentaner Uhrzeit. Wenn ich das -2 weglasse, kommt natürlich das normale Datum 2012-08-03 10:50:04
 

ukulele

Datenbank-Guru
Beiträge
4.394
gnarr
Code:
SELECT    date_add(now(), interval -2 day)
müsste dann aber Heute - 2 Tage ausgeben.
Code:
SELECT    *
FROM    tb_activity
WHERE    assigned_to = 17
AND        closed = 'n'
AND        isnull(cast(s_date AS INT),0) >= year(date_add(now(), interval -2 day))*10000 + month(date_add(now(), interval -2 day))*100 + day(date_add(now(), interval -2 day))
 

dengg

Benutzer
Beiträge
8
Code:
SELECT    date_add(now(), interval -2 day)
Das funktioniert jetzt. Aber wie kriege ich das in die richtige Form? Also 20120801.

In PHP funktionierts nicht. Scheint immer noch derselbe Syntax Error zu sein.
 
Werbung:

ukulele

Datenbank-Guru
Beiträge
4.394
Eigentlich sollte er mit
year(date_add(now(), interval -2 day))*10000
die Jahreszahl aus dem Datum - 2 Tage ziehen, mit 10000 multiplizieren = 20120000 und mit
month(date_add(now(), interval -2 day))*100
sowie
day(date_add(now(), interval -2 day))
addieren = 20120801
 
Oben