使用月份和年份在SQL中获取日期时间过滤行

时间:2016-01-04 04:16:38

标签: c# sql sql-server date datetime

我的表在SQL Server中有一个datetime列。现在,我希望使用它的月份和年份来过滤datetime列上的表格。

如果我有完整的datetime格式,我可以在该查询中设置><,但是通过使用月份和年份过滤器,我不知道该怎么做这一点。

请建议我如何在桌面上进行过滤?

表格详情:

  • 表名:Sales
  • DateTime列:Created Date(yy / mm / dd)

存储过程参数:

@MinimumMonth int,    @MaximumMonth int,    @MinimumYear int,    @MaximumYear int,

这些是我可以通过我的存储过程参数发送的所有值,现在我需要将dateformat形成为Minimonth / Miniyear和Maxmonth / MaxYear,并且需要根据这些mini amd max mm / yy范围来过滤记录。

提前致谢

2 个答案:

答案 0 :(得分:4)

在这种情况下,您应该考虑一些事项。

  1. CreatedDate应为索引字段
  2. 您应该避免在索引字段上应用函数,因为它会导致索引无效。
  3. 如果CreatedDate字段是日期时间字段

    ,您还需要考虑时间组件
    DECLARE @MinimumMonth INT = 1
    DECLARE @MaximumMonth int = 12
    DECLARE @MinimumYear INT = 2014
    DECLARE @MaximumYear INT = 2016
    
    DECLARE @MinDate Date
    DECLARE @MaxDate Date
    DECLARE @TempDate Date
    
    SET @MinDate = Convert(date, '01/'+ CAST(@MinimumMonth AS varchar) + '/' + CAST(@MinimumYear AS varchar),103)
    SET @TempDate = Convert(date,'01/'+ CAST(@MaximumMonth AS varchar) + '/' + CAST(@MaximumYear AS varchar),103)
    SET @MaxDate = DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,@TempDate)+1,0))  
    --print @MaxDate
    
    SELECT * FROM Sales 
    WHERE 
    CreatedDate >= @MinDate AND CreatedDate <= @MaxDate
    

答案 1 :(得分:1)

您可以使用MONTH()YEAR()从列中获取确切的月份或年份。

SELECT * FROM Sales 
WHERE 
(MONTH(CreatedDate) Between @MinimumMonth AND @MaximumMonth) 
AND 
(YEAR(CreatedDate) Between @MinimumYear AND @MaximumYear)

希望这个帮助