根据日期时间数据类型查询结果

时间:2016-08-19 08:59:54

标签: sql sql-server

表:订单

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合作。现在如何做到这一点?

6 个答案:

答案 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'

或者您可以使用YEARMONTH函数:

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'