Ayuda de la declaración SQL & # 8212; Seleccione clientes que ordenaron hoy
Pregunta
Supongamos que tengo una tabla que almacena los ID de pedido de los clientes. Tales como
| ID de cliente | ID de pedido | Fecha de pedido
¿Cómo puedo obtener todos los clientes que han pedido hoy?
También OrderDate sería un DateTime.
Algo como
SELECT DISTINCT CustomerID
FROM TableName
Where OrderDate > Today
Pero la última parte es lo que no puedo entender.
Solución
Es bastante común que solo desees una fecha fuera de fecha y hora: deberías poder buscar en Google los detalles de tu RDBMS (ya que no lo mencionas). Lo importante es hacer su consulta SARGable transformando la fecha de de hoy 1 : no es la fecha del pedido.
Para MSSQL, algo como
SELECT DISTINCT CustomerID
FROM TableName
--I assume you want midnight orders as well - so use >=
Where OrderDate >= DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))
funcionaría tomando el número de días que hoy es desde la Fecha 0 ( DATEDIFF (dd, 0, GETDATE ())
) y agregándolos de nuevo a la Fecha 0 ( DATEADD (dd, 0 , x)
). Sin embargo, eso es específico de T-SQL.
1 Si estuviera buscando una fecha arbitraria, todavía transformaría ambos argumentos:
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)
Otros consejos
En Oracle, la declaración sería algo así como:
SELECT DISTINCT CustomerID
FROM TableName
Where OrderDate >= trunc(sysdate)
SQL-Server debería ser similar
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)
He intentado ver que devuelve el mismo número para la fecha dada con una hora diferente. Por lo tanto, debería funcionar cuando una fecha se convierte a su valor numérico.
SELECT CAST (0 AS DATETIME)
devuelve 1/1/1900 12:00:00 AM