Ich habe ein start_date
und end_date
. Ich möchte die Liste der Daten zwischen diesen beiden Daten erhalten. Kann mir jemand helfen, den Fehler in meiner Anfrage zu zeigen.
select Date,TotalAllowance
from Calculation
where EmployeeId=1
and Date between 2011/02/25 and 2011/02/27
Hier Date
ist eine datetime
Variable.
sql
sql-server
tsql
datetime
sql-server-2005
Neeraj
quelle
quelle
between
sollten Sie wie erwartet arbeiten.Da eine datetime ohne ein angegebenes Zeitsegment einen Wert von hat
date 00:00:00.000
, müssen Sie entweder die Uhrzeit für Ihr Enddatum angeben oder Ihr Enddatum erhöhen und verwenden, wenn Sie sicher sein möchten, dass Sie alle Daten in Ihrem Bereich erhalten<
.ODER
ODER
Verwenden Sie NICHT das Folgende, da es einige Datensätze vom 28.02.2011 zurückgeben könnte, wenn ihre Zeiten 00: 00: 00.000 sind.
quelle
'2011/02/28 00:00:00.000'
?convert(date, Date) between '2011/02/25' and '2011/02/27'
(zumindest mit einem aktuellen MS SQL Server). Derconvert()
Teil kümmert sich um das Entfernen des Zeitteils und der Zwischenvergleich funktioniert dann wie erwartet.Versuche dies:
Die Datumswerte müssen als Zeichenfolgen eingegeben werden.
Um sicherzustellen, dass Ihre Abfrage für SQL Server 2008 und höher zukunftssicher ist,
Date
sollte sie maskiert werden, da sie in späteren Versionen ein reserviertes Wort ist.Beachten Sie, dass die Daten ohne Uhrzeit standardmäßig Mitternacht sind, sodass Sie dort möglicherweise nicht den richtigen Wert haben.
quelle
Fügen Sie hier zuerst einen Tag zum aktuellen Enddatum hinzu,
2011-02-28 00:00:00
dann subtrahieren Sie eine Sekunde, um das Enddatum festzulegen2011-02-27 23:59:59
. Auf diese Weise können Sie alle Daten zwischen den angegebenen Intervallen abrufen.quelle
- wenn der Datentyp unterschiedlich ist
quelle
Diese Abfrage eignet sich zum Abrufen der Werte zwischen dem aktuellen Datum und den nächsten drei Daten
Dadurch werden dem aktuellen Datum möglicherweise zusätzliche 3 Tage Puffer hinzugefügt.
quelle
Dies ist sehr alt, aber angesichts der vielen Erfahrungen, die ich mit Daten gemacht habe, sollten Sie Folgendes berücksichtigen: Benutzer verwenden unterschiedliche regionale Einstellungen. Einige Personen (und einige Datenbanken / Computer, abhängig von den regionalen Einstellungen) lesen dies möglicherweise Datum 11/12/2016 als 11. Dezember 2016 oder 12. November 2016. Darüber hinaus wird der an die MySQL-Datenbank gelieferte 16.11.12 intern in den 12. November 2016 konvertiert, während die auf einem regionalen Einstellungscomputer in Großbritannien ausgeführte Access-Datenbank interpretiert und interpretiert wird Speichern Sie es als 16. November 2012.
Aus diesem Grund habe ich es mir zur Aufgabe gemacht, bei jeder Interaktion mit Daten und Datenbanken explizit zu sein. Daher gebe ich meine Abfragen und Programmiercodes immer wie folgt an:
Beachten Sie auch, dass Access das # akzeptiert, also:
MS SQL Server wird dies jedoch nicht tun, daher verwende ich immer "'" wie oben, was beide Datenbanken akzeptieren.
Und wenn ich dieses Datum von einer Variablen im Code erhalte, konvertiere ich das Ergebnis immer wie folgt in einen String:
Ich schreibe dies, weil ich weiß, dass einige Programmierer manchmal nicht scharf genug sind, um die inhärente Konvertierung zu erkennen. Es gibt keinen Fehler für Daten <13, nur unterschiedliche Ergebnisse!
Fügen Sie für die gestellte Frage einen Tag zum letzten Datum hinzu und führen Sie den Vergleich wie folgt durch:
quelle
quelle
Versuchen Sie, die Daten zwischen # # zu setzen, zum Beispiel:
Es hat bei mir funktioniert.
quelle
Wenn das Datum in 24 Stunden liegt und am Morgen beginnt und in der Nacht endet, sollte Folgendes hinzugefügt werden:
quelle
Beste Abfrage für das ausgewählte Datum zwischen dem aktuellen Datum und drei Tagen zurück :
Beste Abfrage für das ausgewählte Datum zwischen dem aktuellen Datum und den nächsten drei Tagen :
quelle
Überprüfen Sie die folgenden Beispiele: Sowohl funktionierend als auch nicht funktionierend.
ODER
ODER
UND unten funktioniert nicht:
quelle
Wir können zwischen verwenden, um zwei Datumsdaten anzuzeigen, aber dies durchsucht die gesamten Daten und vergleicht sie, sodass unser Prozess für große Datenmengen langsam wird. Ich empfehle daher jedem, Folgendes zu verwenden
datediff
:Hier ist der Kalender die Tabelle, dt als Variable für das Startdatum und dt2 als Variable für das Enddatum.
quelle
Ich verwende gerne die Syntax '1 MonthName 2015' für Daten wie:
für Termine
quelle
Ich würde gehen für
Die Logik besteht darin, dass
>=
das gesamte Startdatum und<
das Enddatum ausgeschlossen werden. Daher fügen wir dem Enddatum eine Einheit hinzu. Dies kann monatelang angepasst werden, zum Beispiel:quelle
quelle
Sie können diese SQL versuchen
quelle
Eigentlich sollten alle SQL-Daten im Format JJJJ-MM-TT vorliegen, um die genauesten Ergebnisse zu erzielen.
quelle
quelle
es ist besser so zu schreiben:
quelle
quelle