如何在SQL Server 2012中按月和年进行搜索?

时间:2019-05-30 20:17:55

标签: c# sql-server-2012

我正在尝试编写查询以仅搜索月份和年份。我所做的是搜索月份。有人可以告诉我如何修改此查询以搜索月份和年份,例如:5/2019或5-2019吗?

select firstname, lastname, date  
from tblInfo 
where data = 02/2019

3 个答案:

答案 0 :(得分:1)

您可以使用T-SQL的MONTHYEAR函数:

SELECT firstname, lastname , date FROM tblInfo 
   WHERE MONTH(date) = 2 AND YEAR(date) = 2019

答案 1 :(得分:1)

搜索包括该月的第一天到不包括下一个月的第一天的时间。

SELECT firstname,
       lastname,
       date  
       FROM tblInfo 
       WHERE data >= '2019-02-01'
             AND data < '2019-03-01';

与使用datepart()year()month()的解决方案相比,它的优势在于,如果有索引,它可以使用data上的索引,因此可以更好地执行在这种情况下。

使用左开区间而不是闭区间(在月的第一天和最后一天使用BETWEEN)还具有以下优点:如果data有时间部分,它也将起作用。如果这样的日期/时间在一个月的最后一天00:00之后,但在下个月的第一天(在00:00)之前,则对于时间分数的任意精度,将包括在内。

答案 2 :(得分:0)

将日期DATEPART与您的常量/变量进行比较,例如:

... WHERE DATEPART(yy,tbleInfoAwareness.date) = 2019 AND DATEPART(mm,tbleInfoAwareness.date) = 5

另一种方法是比较日期范围-更好,因为可以使用索引:

.... WHERE tbleInfoAwareness.date BETWEEN '2019-05-01` AND '2019-05-31 23:59:59'

PS:增加了前一天的时间。