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.

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top