Справка по инструкции SQL — Выберите клиентов, которые сделали заказ сегодня
Вопрос
Допустим, у меня есть таблица, в которой хранятся идентификаторы заказов клиентов.Такие , как
| Идентификатор клиента | Идентификатор заказа | Дата заказа
Как я могу получить всех клиентов, которые сделали заказ сегодня?
Также OrderDate будет означать дату-время.
Что - то вроде
SELECT DISTINCT CustomerID
FROM TableName
Where OrderDate > Today
Но последняя часть - это то, чего я не могу понять.
Решение
Довольно часто требуется только дата из datetime - вы должны иметь возможность найти в Google специфику вашей СУБД (поскольку вы не упоминаете об этом).Важным моментом является составление вашего запроса Саргабл путем преобразования сегодняшний Дата1 - не указана дата заказа.
Для MSSQL, что-то вроде
SELECT DISTINCT CustomerID
FROM TableName
--I assume you want midnight orders as well - so use >=
Where OrderDate >= DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))
сработало бы, взяв количество дней, начиная с сегодняшней даты 0 (DATEDIFF(dd, 0, GETDATE())
) и добавляя их обратно к дате 0 (DATEADD(dd, 0, x)
).Однако это специфично для T-SQL.
1 Если бы вы искали произвольную дату, вы бы все равно преобразовали оба аргумента:
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)
Другие советы
В Oracle это утверждение выглядело бы примерно так:
SELECT DISTINCT CustomerID
FROM TableName
Where OrderDate >= trunc(sysdate)
SQL-Сервер должен быть похожим
SELECT DISTINCT CustomerID
FROM TableName
Where OrderDate = CAST(GetDate() AS NUMERIC)
или
SELECT DISTINCT CustomerID
FROM TableName
Where CAST(OrderDate AS NUMERIC) = CAST(GetDate() AS NUMERIC)
Я попытался убедиться, что он возвращает одно и то же число для заданной даты с другим временем.Таким образом, это должно сработать, когда дата преобразуется в ее числовое значение.
SELECT CAST(0 AS DATETIME)
возвращается 1/1/1900 12:00:00 утра