2016-09-26 2 views
0

Ich habe eine Bestell-Tabelle mit Spalte Bestelldatum (Timestamp) Ich möchte alle Bestellungen vor 3 Uhr auswählen. Ich bin kein Experte in SQL. Ich habe wie diesen versucht,Bestellungen vor 3pm: SQL

select * from tableA where orderdate < '%Y-%M-%D 15:00:00.000' 

Jede Hilfe bitte

+0

wirklich der Typ ist, der Spalte 'timestamp' ist? Wenn ja, haben Sie andere Probleme. – DavidG

+0

Meine Schuld ... der Datentyp von Bestelldatum ist "Datetime". – Ramaq

+3

WO DATEPART (STUNDE, Bestelldatum) <... – jarlh

Antwort

0

Nur substr verwenden, um die Stunde Teil des Zeitstempels zu erhalten, sofern Sie eine String-Darstellung in einem bekannten Format haben.

Wenn Ihr Format YYYY-MM-DD HH:MM:SS lautet, wäre es select * from wherever where substr(orderdate, 11,2) < 15.

+1

Dies funktioniert, ist aber nicht zu sichern, so dass jede Indizierung nutzlos wäre. –

+0

@SeanLange Absolut. Ich habe jedoch den Verdacht, dass OP an erster Stelle kein Index-Setup hat. Und in vielen Datenbanken (weiß nicht, über Microsoft) gibt es nicht einmal einen Weg, um zu erreichen, was angefordert wird, während immer noch der Index knapp wird einen funktionalen Index oder eine separate Spalte erstellen. – letitbee

+0

Sicher kann dies eine SARGable Abfrage sein. Siehe die Antwort von Kannan oben. Die Konvertierung von Datum zu Uhrzeit ist vollständig sargierbar. Und natürlich sollten wir niemals eine nonSARGable-Abfrage schreiben und annehmen, dass es keinen Index gibt. Und selbst wenn es heute keinen Index gibt, sollte unsere Abfrage so geschrieben sein, dass sie den Index nutzen kann, wenn einer erstellt wird. :) –

1

können Sie in Zeit umwandeln und überprüfen, ob es < 03.00

SELECT * from yourtable where convert(time, orderdate) < '15:00:00.000' 
+0

Das Konvertieren von Datum zu Uhrzeit ist einer dieser seltenen Fälle, in denen eine Funktion mit einer Spalte tatsächlich SARGable ist. Dies ist der beste Weg, um damit umzugehen. –

-1

select * from tableA where datepart(hour,cast(orderdate as date))

+0

Dies ist nicht sARGable und wie gepostet es nicht einmal funktioniert. –