it-swarm.com.de

SQL-Abfrage zum Auswählen von Datumsangaben zwischen zwei Datumsangaben

Ich habe einen start_date und end_date. Ich möchte die Liste der Daten zwischen diesen beiden Daten abrufen. Kann mir jemand helfen, den Fehler in meiner Anfrage anzuzeigen.

select Date,TotalAllowance 
from Calculation 
where EmployeeId=1
  and Date between 2011/02/25 and 2011/02/27

Hier ist Date eine Variable datetime.

231
Neeraj

sie sollten diese beiden Daten zwischen einfachen Anführungszeichen setzen, wie ..

select Date, TotalAllowance from Calculation where EmployeeId = 1
             and Date between '2011/02/25' and '2011/02/27'

oder verwenden können

select Date, TotalAllowance from Calculation where EmployeeId = 1
             and Date >= '2011/02/25' and Date <= '2011/02/27'
394
Deepak

Da eine Datumszeit ohne ein bestimmtes Zeitsegment den Wert date 00:00:00.000 hat, müssen Sie entweder die Uhrzeit für Ihr Enddatum angeben oder Ihr Enddatum erhöhen und < verwenden, wenn Sie sicher gehen möchten, dass Sie alle Daten in Ihrem Bereich erhalten.

select Date,TotalAllowance from Calculation where EmployeeId=1 
and Date between '2011/02/25' and '2011/02/27 23:59:59.999'

OR

select Date,TotalAllowance from Calculation where EmployeeId=1 
and Date >= '2011/02/25' and Date < '2011/02/28'

ODER 

select Date,TotalAllowance from Calculation where EmployeeId=1 
and Date >= '2011/02/25' and Date <= '2011/02/27 23:59:59.999'

Verwenden Sie NICHT das Folgende, da es einige Datensätze vom 2011/02/28 zurückgeben könnte, wenn die Uhrzeit 00: 00: 00.000 ist.

select Date,TotalAllowance from Calculation where EmployeeId=1 
and Date between '2011/02/25' and '2011/02/28'
106
WelshDragon

Versuche dies:

select Date,TotalAllowance from Calculation where EmployeeId=1
             and [Date] between '2011/02/25' and '2011/02/27'

Die Datumswerte müssen als Zeichenfolgen eingegeben werden.

Um die Zukunftssicherung Ihrer Abfrage für SQL Server 2008 und höher sicherzustellen, sollte Date mit Escapezeichen versehen werden, da es sich in späteren Versionen um ein reserviertes Word handelt.

Beachten Sie, dass die Datumsangaben ohne Uhrzeit als Standardwerte Mitternacht verwenden, sodass Sie dort möglicherweise nicht den richtigen Wert haben.

13
user114600
select * from table_name where col_Date between '2011/02/25' 
AND DATEADD(s,-1,DATEADD(d,1,'2011/02/27'))

Fügen Sie hier zunächst einen Tag zum aktuellen Enddatum hinzu, es wird 2011-02-28 00:00:00 sein, und subtrahieren Sie dann eine Sekunde, um das Enddatum 2011-02-27 23:59:59 festzulegen. Auf diese Weise können Sie alle Daten zwischen den angegebenen Intervallen erhalten.

output:
2011/02/25
2011/02/26
2011/02/27
9
Chandra Prakash

Diese Abfrage ist gut für das Abrufen der Werte zwischen dem aktuellen Datum und den nächsten 3 Daten

SELECT * FROM tableName  WHERE columName 
BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 3 DAY)

Dies fügt dem aktuellen Datum eventuell zusätzliche 3 Tage Puffer hinzu.

6
Vinit Kadkol
select * from test 
     where CAST(AddTime as datetime) between '2013/4/4' and '2014/4/4'

- wenn der Datentyp unterschiedlich ist

5
hamze shoae

Dies ist sehr alt, aber bei vielen Erfahrungen, die ich mit Daten gemacht habe, sollten Sie Folgendes in Betracht ziehen: Menschen verwenden unterschiedliche regionale Einstellungen. Daher lesen einige Personen (und einige Datenbanken/Computer je nach regionalen Einstellungen) dies Datum 11.12.2016 als 11. Dezember 2016 oder 12. November 2016. Darüber hinaus wird der 16.11.12, der an die MySQL-Datenbank geliefert wird, intern auf den 12. November 2016 konvertiert, während die Access-Datenbank, die auf einem britischen Computer mit regionaler Umgebung ausgeführt wird, interpretiert Speichern Sie es als 16. November 2012.

Daher habe ich es mir zur Aufgabe gemacht, bei jeder Interaktion mit Datumsangaben und Datenbanken explizit zu sein. Deshalb gebe ich meine Anfragen und Programmiercodes immer wie folgt an:

SELECT FirstName FROM Students WHERE DoB >= '11 Dec 2016';

Beachten Sie auch, dass Access die # akzeptiert, also:

SELECT FirstName FROM Students WHERE DoB >= #11 Dec 2016#;

mS SQL-Server wird dies jedoch nicht tun, daher verwende ich immer '' 'wie oben, was beide Datenbanken akzeptieren.

Und wenn ich dieses Datum aus einer Variablen im Code bekomme, konvertiere ich das Ergebnis immer wie folgt in eine Zeichenfolge:

"SELECT FirstName FROM Students WHERE DoB >= " & myDate.ToString("d MMM yyyy")

Ich schreibe das, weil ich weiß, dass manche Programmierer manchmal nicht scharf genug sind, um die inhärente Konvertierung zu erkennen. Bei Datumsangaben <13 wird kein Fehler ausgegeben, nur abweichende Ergebnisse!

Fügen Sie für die gestellte Frage einen Tag zum letzten Datum hinzu und führen Sie den Vergleich wie folgt aus:

dated >= '11 Nov 2016' AND dated < '15 Nov 2016' 
4

Platzieren Sie die Datumsangaben zwischen # # , Zum Beispiel:

#2013/4/4# and #2013/4/20#

Es hat für mich funktioniert.

--- EDIT --- Ich erhielt die Benachrichtigung, dass ich zwei Ansehenspunkte verloren habe, weil jemand diese Antwort abgelehnt hat. Bitte stimmen Sie nicht einfach ab, wenn die Antwort für Sie nicht funktioniert. Fragen Sie nach weiteren Informationen/Hilfe in den Kommentaren oder prüfen Sie andere Lösungen.

Ich interessiere mich nicht für Reputationspunkte - ich sage nur, dass dafür keine Abstimmungen gemacht werden.

3
Casper
select Date,TotalAllowance 
from Calculation 
where EmployeeId=1
  and convert(varchar(10),Date,111) between '2011/02/25' and '2011/02/27'
3
njtd

beste Abfrage für das Auswahldatum zwischen aktuellem Datum und drei Tagen zurück :

  select Date,TotalAllowance from Calculation where EmployeeId=1 and Date BETWEEN       
DATE_SUB(CURDATE(), INTERVAL 3 DAY)  AND CURDATE() 

beste Abfrage für das Auswahldatum zwischen aktuellem Datum und nächsten drei Tagen :

  select Date,TotalAllowance from Calculation where EmployeeId=1 and Date BETWEEN   
   CURDATE()  AND DATE_ADD(CURDATE(), INTERVAL 3 DAY)   
2
user3223432

wenn das Datum in 24 Stunden beginnt und am Morgen beginnt und in der Nacht endet, sollte Folgendes hinzugefügt werden: 

declare @Approval_date datetime
set @Approval_date =getdate()
Approval_date between @Approval_date +' 00:00:00.000' and @Approval_date +' 23:59:59.999'
1
Sheryar Nizar
Select 
    * 
from 
    Calculation 
where 
    EmployeeId=1 and Date between #2011/02/25# and #2011/02/27#;
1
Saad Sheikh

wir können zwischen zwei Daten anzeigen, aber dies wird die gesamten Daten durchsuchen und vergleichen, sodass unser Prozess für riesige Daten langsam wird. Ich schlage daher vor, dass jeder datediff verwendet:

qry = "SELECT * FROM [calender] WHERE datediff(day,'" & dt & "',[date])>=0 and datediff(day,'" & dt2 & "',[date])<=0 "

hier ist Kalender die Tabelle, dt als Variable für das Startdatum und dt2 ist die Variable für das Enddatum.

1
Bipul Roy

Überprüfen Sie die folgenden Beispiele: Arbeit und Nichtarbeit.

select * from tblUser Where    
convert(varchar(10),CreatedDate,111) between '2015/04/01' and '2016/04/01' //--**Working**

OR

select * from tblUser Where
(CAST(CreatedDate AS DATETIME) between CAST('2015/04/01' AS DATETIME) And CAST('2016/4/30'AS DATETIME)) //--**Working**

OR

select * from tblUser Where
(YEAR(CreatedDate) between YEAR('2015/04/01') And YEAR('2016/4/30')) 
//--**Working**

UND unten funktioniert nicht:

select * from tblUser Where
Convert(Varchar(10),CreatedDate,111) >=  Convert(Varchar(10),'01-01-2015',111) and  Convert(Varchar(10),CreatedDate,111) <= Convert(Varchar(10),'31-12-2015',111) //--**Not Working**


select * from tblUser Where
(Convert(Varchar(10),CreatedDate,111) between Convert(Varchar(10),'01-01-2015',111) And Convert(Varchar(10),'31-12-2015',111)) //--**Not Working**
1
Tobbin Well

Alle SQL-Daten sollten im Format JJJJ-MM-TT vorliegen, um die genauesten Ergebnisse zu erzielen.

Sie können diese SQL ausprobieren

select * from employee where rec_date between '2017-09-01' and '2017-09-11' 
0
Kamran

Ich würde gehen

select Date,TotalAllowance from Calculation where EmployeeId=1
             and Date >= '2011/02/25' and Date < DATEADD(d, 1, '2011/02/27')

Die Logik, dass >= das gesamte Startdatum beinhaltet und < das Enddatum ausschließt, fügen wir eine Einheit zum Enddatum hinzu. Dies kann für Monate angepasst werden, zum Beispiel:

select Date, ... from ...
             where Date >= $start_month_day_1 and Date < DATEADD(m, 1, $end_month_day_1)
0
entonio

Ich benutze gerne die Syntax '1 MonthName 2015' für Datumsangaben:

   WHERE aa.AuditDate>='1 September 2015'
     AND aa.AuditDate<='30 September 2015'

für Termine

0
Juan