Справка по операторам SQL - выберите клиентов, которые заказывали сегодня - PullRequest
4 голосов
/ 30 июля 2009

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

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

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

Также OrderDate будет DateTime.

Что-то вроде

SELECT DISTINCT CustomerID
FROM TableName
Where OrderDate > Today

Но последняя часть - это то, что я не могу понять.

Ответы [ 3 ]

3 голосов
/ 30 июля 2009

Это довольно распространенная ситуация, когда вы хотите, чтобы дата выходила только из даты-времени - вы должны иметь возможность обращаться к Google за подробностями вашей СУБД (поскольку вы ее не упоминаете). Важный момент - сделать ваш запрос SARGable , преобразовав сегодняшний дата 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)
0 голосов
/ 30 июля 2009
SELECT DISTINCT CustomerID
FROM TableName
Where OrderDate = CAST(GetDate() AS NUMERIC)

OR

SELECT DISTINCT CustomerID
FROM TableName
Where CAST(OrderDate AS NUMERIC) = CAST(GetDate() AS NUMERIC)

Я пытался увидеть, что он возвращает тот же номер для данной даты с другим временем. Таким образом, он должен работать, когда дата преобразуется в ее числовое значение.

SELECT CAST(0 AS DATETIME) возвращается 01.01.1900 в 12:00:00

0 голосов
/ 30 июля 2009

В Oracle выражение будет выглядеть примерно так:

SELECT DISTINCT CustomerID  
FROM TableName  
Where OrderDate >= trunc(sysdate)

SQL-сервер должен быть похожим

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...