Pergunta

Say Eu tenho uma tabela que armazena os clientes encomendam IDs. Como

| ID do cliente | ID do pedido | Ordem da data

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.

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top