2017-05-29 4 views
0

Ich muss alle Daten von gestern von 6:59 bis heute um 19:00 Uhr des heutigen Tages auswählen.SQL wählen Sie zwischen zwei Daten und Zeit

Zu wählende Daten sind ein datetime Feld. Das Datum ist nicht konstant, da ich es jeden Tag mit dieser Abfrage generieren werde.

Ich benutze MS SQL Server 2008. Hier ist ein Beispiel Testdaten.

Sample DateTimeField Data

Könnten Sie mir geben eine Idee, wie ich es tun

SELECT transaction 
FROM test_tbl 
WHERE ... 
+0

Sie können 'BETWEEN' oder' Operators' wie '>, =, <' verwenden. Probieren Sie es aus. [Datetime] (https://stackoverflow.com/questions/13869640/filter-by-dates-in-sql) – Joby

+0

Möchten Sie alle Daten zwischen 18:59 Uhr und 19:00 Uhr auswählen? Oder möchten Sie alle Daten zwischen 18:59 Uhr und 19:00 Uhr Gestern auswählen und dann diese Daten (Taste?) Verwenden, um die entsprechenden Zeilen auszuwählen? Heute? –

+0

@RafalZiolkowski Datum ist nicht konstant, wie ich es jeden Tag mit dieser Abfrage generieren werde – Grinex

Antwort

3

Sie können die Spalte mit dem Datum verwenden sehen Zeit Feld in WHERE-Klausel, wenn Ihre Spalte ist transactionDatTim dann Abfrage ist wie folgt:

DECLARE @tempDate DATE -- note that this date and not DateTime 
DECLARE @tempStartDateTime DATETIME, @tempEndDateTime DATETIME 
SET @tempDate = GETDATE() 
SET @tempEndDateTime = DATEADD(hh,19,CAST(@tempDate AS datetime)) 
SET @tempStartDateTime = DATEADD(mi,-1,DATEADD(d,-1,@tempEndDateTime)) 


--the query 
SELECT transaction 
FROM test_tbl 
WHERE transactionDatTim BETWEEN @tempStartDateTime AND @tempEndDateTime 

kürzere Version w/o Temp Variablen

--the query 
SELECT transaction 
FROM test_tbl 
WHERE transactionDatTim BETWEEN 
    DATEADD(mi,-((24-19)*60+1),CAST(CAST(GETDATE() AS DATE) AS datetime)) 
    AND 
    DATEADD(hh,19,CAST(CAST(GETDATE() AS DATE) AS datetime)) 
+0

ich glaube Das ist richtig, aber ich weiß nicht, warum es keine Ausgabe gibt, wenn ich es auf meine Abfrage anwende. versuchen Sie es erneut, erhalten Sie Update. danke für Ihre Hilfe. – Grinex

0

werde Sie können dieses versuchen und

select transaction from test_tb1 where transaction between '2017-05-02 18:59:00' and '2017-05-03 19:00:00'; 
+0

das ist eigentlich, was ich vorher tat, aber die Sache ist, dass das Datum nicht konstant ist – Grinex

0

sein können Sie "zwischen" -Klausel die Datensätze zu finden, die zwischen den beiden Enddaten (einschließlich) liegen:

TRY:

SELECT transaction 
FROM test_tbl 

where datetime between 
cast(convert(varchar, DATEADD(dd,-1, GETDATE()), 101)+' 6:59 PM' as datetime) --to get yesterday's date and time at 6:59 *hardcoded* 
and 
cast(convert(varchar, getdate(), 101)+' 7:00 PM' as datetime) --to get current date at 7pm 
Verwandte Themen