2016-08-19 4 views
0

Таблица: ЗаказыЗапрос результатов на основе даты и времени типа данных

Column  Datatype 
------  -------- 
orderid  int 
orderdate date 
customerid int 

Нам нужен запрос, который вернуть заказы на июнь 2016 года

Я попытался

Select orderid 
    from Orders 
    where orderdate between 2016-06-01 and 2016-06-30 

It дает ошибку, потому что между работами с int only.Как делать сейчас, чтобы это сделать?

ответ

1

Я думаю, что вам не хватает ' при указании диапазона дат. Кроме того, вам необходимо наложить orderdate на номер DATE. Причина в том, что если у вас есть такие данные, как «2016-06-30 12:34:56», BETWEEN '2016-06-01' and '2016-06-30' не вернет запись.

Select orderid 
from Orders 
where CONVERT(DATE, orderdate) between '2016-06-01' and '2016-06-30' 
1

Вы можете использовать функцию YEAR() для извлечения года с указанной даты и MONTH() за месяц.

SELECT orderid FROM Orders 
WHERE YEAR(orderdate) = 2016 and MONTH(orderdate) = 6 
0

BETWEEN не работает с int только, вы можете использовать его для date колонка тоже. Попробуйте следующее:

SELECT 
    [orderid] 
FROM [Orders] 
WHERE [orderdate] BETWEEN '2016-06-01' AND '2016-06-30' 

Или вы можете использовать функции YEAR и MONTH:

SELECT 
    [orderid] 
FROM [Orders] 
WHERE YEAR([orderdate]) = 2016 
     AND MONTH([orderdate]) = 6 

Этот подход, однако, может привести к проблемам с производительностью, так как нет индексов, которые будут использоваться.

1
Select orderid from Orders where DATEADD(day, -1, convert(date, 
orderdate)) between DATEADD(day, -1, convert(date, 2016-06-01)) and 
DATEADD(day, -1, convert(date, 2016-06-30)) 
1

Это должно работать:

select orderid 
from orders 
where orderdate >= '2016-06-01' 
and orderdate < '2016-07-01' 
0

Пожалуйста, используйте одинарные кавычки даты

Select orderid 
    from Orders 
    where orderdate between '2016-06-01' and '2016-06-30'