Справка по инструкции SQL — Выберите клиентов, которые сделали заказ сегодня

StackOverflow https://stackoverflow.com/questions/1203826

  •  05-07-2019
  •  | 
  •  

Вопрос

Допустим, у меня есть таблица, в которой хранятся идентификаторы заказов клиентов.Такие , как

| Идентификатор клиента | Идентификатор заказа | Дата заказа

Как я могу получить всех клиентов, которые сделали заказ сегодня?

Также 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 утра

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top