SQL declaração ajuda - Selecione os clientes que ordenou hoje
Pergunta
Say Eu tenho uma tabela que armazena os clientes encomendam IDs. Como
| ID do cliente | ID do pedido | Ordem da data ??p>
Como posso obter todos os clientes que tenha encomendado hoje?
Além disso OrderDate seria um DateTime.
Algo como
SELECT DISTINCT CustomerID
FROM TableName
Where OrderDate > Today
Mas a última parte é o que eu não consigo descobrir.
Solução
É bastante comum para só deseja uma data a partir de uma data e hora - você deve ser capaz de Google para as especificidades do seu RDBMS (desde que você não mencioná-lo). O bit importante é fazer sua consulta sargable transformando hoje data 1 -. não a data fim
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()))
iria funcionar tomando número de dias de hoje é de Data 0 (DATEDIFF(dd, 0, GETDATE())
) e adicioná-los de volta para Data 0 (DATEADD(dd, 0, x)
). Isso é T-SQL específica, no entanto.
1 Se você estava procurando uma data arbitrária para, você ainda transformar ambos os 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)
Outras dicas
No Oracle a declaração seria algo parecido com:
SELECT DISTINCT CustomerID
FROM TableName
Where OrderDate >= trunc(sysdate)
SQL-Server deve ser semelhante
SELECT DISTINCT CustomerID
FROM TableName
Where OrderDate = CAST(GetDate() AS NUMERIC)
ou
SELECT DISTINCT CustomerID
FROM TableName
Where CAST(OrderDate AS NUMERIC) = CAST(GetDate() AS NUMERIC)
Eu tentei ver que ele retorna o mesmo número a data indicada com um tempo diferente para. Assim, ele deve funcionar quando a data é convertida para o seu valor numérico.
SELECT CAST(0 AS DATETIME)
retornos 1/1/1900 00:00:00