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
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
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.
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. –
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
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. –
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
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. –
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)
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 " –
[diese] (http://stackoverflow.com/questions/17717515/how-to-query-for-todays-date-and-7-days-before-data) könnte helfen – ArchLicher
Seine Korrigieren Ihre Abfrage wird gut funktionieren. aber es wird alle vorherigen Datensätze zurückgeben –
Ja, ich möchte alle Datensätze, die unter 7 Tagen angezeigt werden – silentstorm21