Domanda

Supponi di avere una tabella in cui sono archiviati gli ID ordine dei clienti. Come

| ID cliente | ID ordine | Data ordine

Come posso ottenere tutti i clienti che hanno ordinato oggi?

Anche OrderDate sarebbe un DateTime.

Qualcosa di simile

SELECT DISTINCT CustomerID
FROM TableName
Where OrderDate > Today

Ma l'ultima parte è ciò che non riesco a capire.

È stato utile?

Soluzione

È abbastanza comune desiderare solo una data fuori da un datetime - dovresti essere in grado di Google per le specifiche del tuo RDBMS (dal momento che non lo dici). L'importante è rendere la tua query SARGable trasformando la data di oggi 1 - non la data dell'ordine.

Per MSSQL, qualcosa del genere

SELECT DISTINCT CustomerID
FROM TableName
--I assume you want midnight orders as well - so use >=
Where OrderDate >= DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))

funzionerebbe prendendo il numero di giorni oggi a partire dalla Data 0 ( DATEDIFF (dd, 0, GETDATE ()) ) e aggiungendoli alla Data 0 ( DATEADD (dd, 0 , x) ). Questo è specifico per T-SQL, tuttavia.

1 Se stessi cercando una data arbitraria, trasformeresti comunque entrambi gli argomenti:

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)

Altri suggerimenti

In Oracle la dichiarazione sarebbe simile a:

SELECT DISTINCT CustomerID  
FROM TableName  
Where OrderDate >= trunc(sysdate)

SQL Server dovrebbe essere simile

SELECT DISTINCT CustomerID
FROM TableName
Where OrderDate = CAST(GetDate() AS NUMERIC)

o

SELECT DISTINCT CustomerID
FROM TableName
Where CAST(OrderDate AS NUMERIC) = CAST(GetDate() AS NUMERIC)

Ho provato a vedere che restituisce lo stesso numero per la data specificata con un orario diverso. Pertanto, dovrebbe funzionare quando una data viene convertita nel suo valore numerico.

SELECT CAST (0 AS DATETIME) restituisce 1/1/1900 12:00:00 AM

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top