选择查询过滤来自特定年份和月份的数据
问题描述:
我想显示用户选择年份3月到明年4月的数据(例如:如果用户选择2017年,则需要选择从2017年3月到4月的数据2018年)。过滤它的最佳查询是什么?它应该是从所选年份开始的顺序。选择查询过滤来自特定年份和月份的数据
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 Server的更高版本(2012+)有一个很好的内置函数,称为datefromparts
。但是,由于您的问题被标记为sql-server-2005,除非您可以升级您的数据库(并且您真的应该考虑它,自2005年以来不再受Microsoft支持),否则这并没有多大帮助。
但是,因为你知道你想要的所有三月和次年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值。 )
答
如果你已经在手的起始月份和日期,那么我不明白为什么你不能只是增加一个上限的日期在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)
在'CAST'附近显示语法不正确,预计'AS'。@ Year在参数化查询中作为2017传递 – user2431727
我已经很快关闭括号。现在试试。 –
明白了。请更正与答案在哪里。 WHERE submitted_date> = CAST(CAST(@Year as char(4))+'-03-01 00:00:00'as datetime) AND submitted_date
user2431727