2012-08-06 106 views
0

我有一个ASP页面链接到SQL服务器。基本上我需要一些查询将提取特定日期之间的所有记录。我需要过去6个月的每月分类。ASP/SQL Server - 从/到基于年份的月份的日期

所以,这个月的月(这是第6),所以第一个查询需要有这样一行

AND DATE BETWEEN '2012-08-01' and '2012-08-31' 

我需要5个查询,这不能不

AND DATE BETWEEN '2012-07-01' and '2012-07-31' 

。 ..

AND DATE BETWEEN '2012-06-01' and '2012-06-30' 

等等回到3月。

有没有办法做到这一点?我试图做下面的VB脚本,但它没有给出正确的结果;

ThisMonth = Date 
Month1 = DateAdd("m", -1, Date) 
Month1From = DateAdd("d", 1, Month1 - Day(Date)) 
Month1To = DateAdd("m", 1, Month1 - Day(Date)) 

Month2 = DateAdd("m", -2, Date) 
Month2From = DateAdd("d", 1, Month2 - Day(Date)) 
Month2To = DateAdd("m", 1, Month2 - Day(Date)) 

Month3 = DateAdd("m", -3, Date) 
Month3From = DateAdd("d", 1, Month3 - Day(Date)) 
Month3To = DateAdd("m", 1, Month3 - Day(Date)) 

Month4 = DateAdd("m", -4, Date) 
Month4From = DateAdd("d", 1, Month4 - Day(Date)) 
Month4To = DateAdd("m", 1, Month4 - Day(Date)) 

Month5 = DateAdd("m", -5, Date) 
Month5From = DateAdd("d", 1, Month5 - Day(Date)) 
Month5To = DateAdd("m", 1, Month5 - Day(Date)) 

我要构建基于变量的SQL,但我不能,因为变量Month5To被显示为比赛的第29,但有31天三月

任何人都可以帮忙吗?

回答

0

为什么不改变你的查询,以便对

WHERE MONTH(date)= @m AND YEAR(date) = @y 

过滤你也可以得到一个结果使用GROUP BY查询

另外请注意,您的原始查询将会失败应该日期值设置的所有结果有任何时间附加。

即:2012-07-31 09:15是不是 '2012-07-01' 之间 '2012-07-31'

+0

OK,通过@m和@y你的意思是我创建变量在VB脚本? – 2012-08-06 09:28:41

+0

我的意思是,理想情况下,参数化SQL中的参数(请参阅http://stackoverflow.com/questions/770419/how-to-make-a-parametrized-sql-query-on-classic-asp)但是,值为月和年。 – podiluska 2012-08-06 09:30:10

+0

日期列没有时间。不确定参数查询,我只有RO访问服务器,所以不认为这会工作?我现在修改了它,以便按照建议在SQL Server SQL中使用MONTH和YEAR函数。谢谢 – 2012-08-06 09:57:38

相关问题