2016-04-06 13 views
0

das ist meine AbfrageWie filtern weniger als 7 Tage in meiner Recherche für meinen wöchentlichen Bericht

SELECT 
    StudentID, DateRegistered 
FROM 
    StudentTable 
WHERE 
    DateDiff(day, DateRegistered, '" & Date.Now & "') <= 7 
+0

[diese] (http://stackoverflow.com/questions/17717515/how-to-query-for-todays-date-and-7-days-before-data) könnte helfen – ArchLicher

+0

Seine Korrigieren Ihre Abfrage wird gut funktionieren. aber es wird alle vorherigen Datensätze zurückgeben –

+0

Ja, ich möchte alle Datensätze, die unter 7 Tagen angezeigt werden – silentstorm21

Antwort

1

Sie haben Sie RDBMS nicht markieren, und jeder unterschiedliche Funktionen für Daten, aber eine davon sollte funktionieren:

SELECT StudentID, DateRegistered 
FROM StudentTable 
WHERE DateDiff(day, DateRegistered, now()) <= 7 

Oder

WHERE DateDiff(day, DateRegistered, getdate()) <= 7 

Oder diese:

CURDATE() 

Beachten Sie, dass ich das lokale DBMS verwendet habe, um das Datum auszuwählen, keine Notwendigkeit, dies mit einem Parameter auf der PHP-Seite zu tun.

+0

Obwohl dieser Kommentar auf dem SQL Server-Frage-Tag basiert, wird keiner Ihrer Ansätze verwende keinen Index. Für einen großen Tisch könnte das eine große Sache sein. Es ist am besten, eine 'DATEADD()' Funktion zu verwenden, um das Datum vor 7 Tagen zu erhalten, wie: 'WHERE DateRegistered> = DATEADD (Tag, 7, GETDATE())'. Sie müssen sich auch darüber im Klaren sein, dass 'GETDATE()' die Zeit zurückgibt, also 7 Tage vom aktuellen Datum + Uhrzeit. Wenn Sie den ganzen Tag betrachten wollen, schauen Sie in "floor a datetime". Verwenden Sie etwas wie: 'WHERE DateRegistered> = CONVERT (Datum, DATEADD (Tag, 7, GETDATE()))' oder eine andere Art, die Datetime zu unterbinden. –

0

Das Datum sollte im Format "YYYY-MM-dd" sein.

SELECT 
    StudentID, DateRegistered 
FROM 
    StudentTable 
WHERE 
    DateDiff(day, DateRegistered, '" & DateTime.Now.ToString('yyyy-MM-dd') & "') <= 7 
+0

Ihre Abfrage verwendet keinen Index und scannt die Tabelle. Für kleine Tische wird es keinen Unterschied machen, aber wenn der Tisch größer wird, werden Sie bemerken. –

+0

Danke, dass Sie darauf hingewiesen haben, dass ich das formatierte Datum hinzugefügt habe, um sicherzustellen, dass datetime im richtigen Format ist. Op hat nichts zu Indexierung oder Tabellengröße gesagt, also haben Sie es weggelassen. – lobo

+1

Ich habe auf das Problem mit dem Index hingewiesen, weil es ein einfacher Fehler ist, der die Laufzeit der Abfrage beeinflusst. Jedes Mal, wenn Sie eine WHERE-Klausel schreiben, sollten Sie darüber nachdenken, wie Sie einen Index treffen können. Wenn es einen Index für "DateRegistered" gibt, kann er nicht verwendet werden, weil Sie ihn über die 'DATEDIFF()' Funktion ausführen. Wenn Sie es wie folgt schreiben: 'WHERE DateRegistered> = DATEADD (Tag, 7, GETDATE())' verwenden Sie DateRegistered ohne Änderungen, und ein Index kann verwendet werden. –

0
cmd = "SELECT StudentID, DateRegistered 
FROM StudentTable 
WHERE DateRegistered between @startdate and @enddate", connectionstring) 

cmd.parameters.addwithvalue("@StartDate",today.date.subtract(timespan.fromdays(7))) 
cmd.parameters.addwithvalue("@EndDate",today) 
+0

Dies wird einen Index verwenden. Aber ich bevorzuge es nie, 'BETWEEN' zu verwenden, es scheint so zweideutig, wird es'> = und <=' or '> und <'verwenden. Ich benutze nur das, was für die Situation angemessen ist, und es ist klar: "DateRegistered> = @startdate und DateRegistered <= @ enddate" oder "DateRegistered" @startdate und DateRegistered <@ enddate " –

Verwandte Themen