表:订单
Column Datatype
------ --------
orderid int
orderdate date
customerid int
我们需要一个2016年6月退回订单的查询。
我试过
Select orderid
from Orders
where orderdate between 2016-06-01 and 2016-06-30
它给出了错误,因为只与int
合作。现在如何做到这一点?
答案 0 :(得分:1)
您可以使用功能YEAR()
从指定日期提取年份,并在该月提取MONTH()
。
SELECT orderid FROM Orders
WHERE YEAR(orderdate) = 2016 and MONTH(orderdate) = 6
答案 1 :(得分: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'
答案 2 :(得分: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))
答案 3 :(得分:1)
这也应该有效:
select orderid
from orders
where orderdate >= '2016-06-01'
and orderdate < '2016-07-01'
答案 4 :(得分: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
但是,这种方法可能会导致性能问题,因为没有要使用的索引。
答案 5 :(得分:0)
请在日期周围使用单引号
Select orderid
from Orders
where orderdate between '2016-06-01' and '2016-06-30'