如何在SQL查询中选择年和月的组合?

如何在SQL查询中选择年和月的组合?,sql,sql-server,Sql,Sql Server,我需要一些SQL查询方面的帮助,我需要找到我感兴趣的所有可能的年和月的组合。下面是我对它的看法,o.orderdate的类型是DATETIME SELECT o.orderdate FROM Sales.Orders o WHERE (YEAR(o.orderdate) IN (2007, 2008)) AND (MONTH(o.orderid) IN (1, 2, 3)) ORDER BY o.orderdate; 我得到的结果是,在这里我们可

我需要一些SQL查询方面的帮助,我需要找到我感兴趣的所有可能的年和月的组合。下面是我对它的看法,
o.orderdate
的类型是
DATETIME

SELECT 
    o.orderdate
FROM
    Sales.Orders o
WHERE  
    (YEAR(o.orderdate) IN (2007, 2008))
    AND (MONTH(o.orderid) IN (1, 2, 3))
ORDER BY 
    o.orderdate;
我得到的结果是,在这里我们可以看到没有选择月份

2007-07-08 00:00:00.000
2007-07-09 00:00:00.000
2007-07-09 00:00:00.000
2007-07-10 00:00:00.000
2007-07-11 00:00:00.000
2007-07-11 00:00:00.000
2007-07-14 00:00:00.000
2007-07-15 00:00:00.000
2007-07-16 00:00:00.000
2007-07-16 00:00:00.000
2007-07-17 00:00:00.000
2007-07-18 00:00:00.000
2007-07-18 00:00:00.000
2007-07-21 00:00:00.000
2007-07-22 00:00:00.000
2007-07-22 00:00:00.000
2007-07-23 00:00:00.000
2007-07-24 00:00:00.000
2007-07-25 00:00:00.000
2007-07-25 00:00:00.000
2007-07-28 00:00:00.000
2007-07-29 00:00:00.000
2007-07-29 00:00:00.000
2007-07-30 00:00:00.000
2007-07-31 00:00:00.000
2007-07-31 00:00:00.000
2007-08-01 00:00:00.000
2007-08-04 00:00:00.000
2007-08-05 00:00:00.000
2007-08-05 00:00:00.000
2007-08-06 00:00:00.000
2007-08-07 00:00:00.000
2007-08-07 00:00:00.000
2007-08-08 00:00:00.000
2007-08-11 00:00:00.000
2007-08-11 00:00:00.000
2007-08-12 00:00:00.000
2007-08-12 00:00:00.000
2007-08-13 00:00:00.000
2007-08-14 00:00:00.000

它是否应该是
orderdate
而不是
orderid

SELECT
o.orderdate
FROM Sales.Orders o
WHERE (YEAR(o.orderdate) IN (2007, 2008))
  AND (MONTH(o.orderdate) IN (1, 2, 3))
ORDER BY o.orderdate;

您在MONTH()函数中输入了错误的参数

SELECT
  o.orderdate
FROM Sales.Orders o
WHERE (YEAR(o.orderdate) IN (2007, 2008))
  AND (MONTH(o.orderdate) IN (1, 2, 3))
 ORDER BY o.orderdate;
或者,若要选择日期范围内的日期,最佳做法是使用完整日期

SELECT
  o.orderdate
FROM Sales.Orders o
WHERE (o.orderdate < '2007-01-01' AND o.orderdate < '2007-03-01')
  OR (o.orderdate < '2008-01-01' AND o.orderdate < '2008-03-01')
 ORDER BY o.orderdate;
选择
o、 订单日期
来自销售订单
其中(订单日期<'2007-01-01'和订单日期<'2007-03-01')
或(订单日期<'2008-01-01'和订单日期<'2008-03-01')
按o.orderdate订购;

可能是因为您使用的是
MONTH(Orderid)
而不是
MONTH(OrderDate)
(MONTH(o.Orderid)
??天哪,我完全错过了:/无论如何,我不能再删除它了,因为它有答案