SQL-Anweisung Hilfe - Wählen Sie Kunden, die heute bestellen
Frage
Sagen, dass ich eine Tabelle, die den Kunden speichert IDs bestellen. Wie
| Kunden-ID | Bestell-ID | Order Date
Wie kann ich alle Kunden, die heute bestellt haben?
Auch würde ein Orderdate Datetime sein.
So etwas wie
SELECT DISTINCT CustomerID
FROM TableName
Where OrderDate > Today
Aber der letzte Teil ist das, was ich nicht herausfinden kann.
Lösung
Es ist ziemlich häufig nur ein Datum aus einem Datetime möge - Sie sollten für die Besonderheiten Ihres RDBMS zu Google in der Lage sein (da Sie es nicht erwähnen). Das wichtige Bit ist Ihre Abfrage Sargable durch Transformation heutige Datums zu machen 1 -. nicht das Bestelldatum
Für MSSQL, so etwas wie
SELECT DISTINCT CustomerID
FROM TableName
--I assume you want midnight orders as well - so use >=
Where OrderDate >= DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))
funktionieren würde, indem sie heute Anzahl der Tage ab Datum 0 (DATEDIFF(dd, 0, GETDATE())
) und das Hinzufügen von ihnen zurück zum Datum 0 (DATEADD(dd, 0, x)
). Das ist T-SQL-spezifisch, though.
1 Wenn Sie für einen beliebigen Zeitpunkt waren auf der Suche, dann würden Sie noch beiden Argumente verwandeln:
SELECT DISTINCT CustomerID
FROM TableName
Where
OrderDate >= DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))
--You *do not* want midnight of the next day, as it would duplicate orders
AND OrderDate < DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()) + 1)
Andere Tipps
In Oracle die Aussage etwas aussehen würde:
SELECT DISTINCT CustomerID
FROM TableName
Where OrderDate >= trunc(sysdate)
SQL-Server sollte ähnlich sein
SELECT DISTINCT CustomerID
FROM TableName
Where OrderDate = CAST(GetDate() AS NUMERIC)
oder
SELECT DISTINCT CustomerID
FROM TableName
Where CAST(OrderDate AS NUMERIC) = CAST(GetDate() AS NUMERIC)
Ich habe zu sehen, versucht, dass es die gleiche Anzahl für das angegebene Datum mit einer anderen Zeit zurückgibt. So sollte es funktionieren, wenn ein Datum zu seinem numerischen Wert umgewandelt wird.
SELECT CAST(0 AS DATETIME)
kehrt 1.1.1900 12.00.00