【问题标题】:Select query for filtering data from particular range of year and month选择查询以过滤特定年份和月份范围内的数据
【发布时间】:2017-11-05 19:33:34
【问题描述】:

我想显示用户选择的 3 月到次年 4 月的数据(例如:如果用户选择 2017 年,则需要选择 2017 年 3 月到 2018 年 4 月的数据)。过滤它的最佳查询是什么。它应该从选定的年份开始排序。

SELECT DATEPART(mm,submitted_date),SUM(total_count),YEAR(submitted_date)
FROM store_details 
WHERE YEAR(submitted_date) = '2017'  
AND  MONTH(submitted_date) >=3 
Group By YEAR(submitted_date),DATEPART(mm,submitted_date) 
Order By YEAR(submitted_date),DATEPART(mm,submitted_date)

【问题讨论】:

    标签: sql sql-server-2005


    【解决方案1】:

    如果您已经掌握了起始月份和日期,那么我不明白为什么您不能在 WHERE 子句中为日期添加上限:

    SELECT
        DATEPART(mm, submitted_date),
        SUM(total_count),
        YEAR(submitted_date)
    FROM store_details 
    WHERE
        (YEAR(submitted_date) = '2017' AND MONTH(submitted_date) >= 3) AND
        (YEAR(submitted_date) = '2018' AND MONTH(submitted_date) < 4)
    GROUP BY
        YEAR(submitted_date),
        DATEPART(mm, submitted_date) 
    ORDER BY
        YEAR(submitted_date),
        DATEPART(mm, submitted_date)
    

    【讨论】:

      【解决方案2】:

      好吧,SQL Server 的更高版本(2012+)有一个很好的内置函数,称为datefromparts。但是,由于您的问题被标记为 ,除非您可以升级您的数据库(而且您真的应该考虑一下,因为 Microsoft 不再支持 2005),否则这并没有太大帮助。

      但是,由于您知道您想要明年 3 月到 4 月之间的所有数据,因此您可以简单地执行以下操作:

      SELECT DATEPART(MONTH,submitted_date),SUM(total_count),YEAR(submitted_date)
      FROM store_details 
      WHERE submitted_date >= CAST(CAST(@Year as char(4)) + '-03-01 00:00:00' As datetime)  
      WHERE submitted_date < CAST(CAST(@Year + 1 as char(4)) + '-04-01 00:00:00' As datetime)  
      
      Group By YEAR(submitted_date),DATEPART(MONTH,submitted_date) 
      Order By YEAR(submitted_date),DATEPART(MONTH,submitted_date)
      

      (也就是说,假设用户将年份作为 int 值提供。)

      【讨论】:

      • 在“CAST”附近显示不正确的语法,预期为“AS”。@Year 在参数化查询中传递为 2017 年
      • 我过早地关闭了括号。立即尝试。
      • 知道了。请更正 Where with And in answer。 WHERE submit_date >= CAST(CAST(@Year as char(4)) + '-03-01 00:00:00' As datetime) AND submit_date
      猜你喜欢
      • 2012-12-14
      • 2015-04-03
      • 2017-08-13
      • 2017-10-19
      • 2017-01-08
      • 1970-01-01
      • 2016-05-16
      • 1970-01-01
      • 2018-01-23
      相关资源
      最近更新 更多