日期:2014-05-18  浏览次数:20458 次

SQL查询某个月的数据,帮忙啊
我想在用户选择某个月份时,查询数据库并列出该月的数据清单。

在SQL查询的时候发现不好处理。

比如 select * from database where date between #2012-3-1# and #2012-3-31#,其中年和月份是个变量。

但因为月份不同,每月天数也不同,我还需要判断是大月份还是小月份,还有是不是闰年,感觉不好处理。

或者直接判断所有记录的年月份是否等于用户选择的年月份,SQL语句好像也没法实现。

请教一下这个怎么解决?

------解决方案--------------------
写存储过程 传参数。
------解决方案--------------------
datediff

DECLARE @inputDate datetime

SELECT ,,, FROM 表 WHERE DATEDIFF(MONTH,[date],@InputDate) = 0
------解决方案--------------------
SELECT * FROM 
database WHERE DATEDIFF(m,date ,'2012-5-1')=0
ORDER BY date 

其中的2012-5-1自己通过选择的年月组合成一个2012年5月的任何一天都可以
------解决方案--------------------
SQL code

 --根据传入的日期参数获取当前月的起止日期
 declare @month_begin_date varchar(10)
 declare @month_end_date varchar(10)
 declare @getdate datetime
 set @getdate =GETDATE() --可以作为存储过程的参数
 select @month_begin_date =convert(varchar(10),dateadd(dd,-DatePart(day,dateadd(dd,-1,@getdate)),getdate()),120)
 select @month_end_date =convert(varchar(10),dateadd(dd,-DatePart(day,dateadd(MM,1,@getdate)),dateadd(MM,1,@getdate)),120) 
 

select @month_begin_date,@month_end_date
/*
2012-05-01    2012-05-31
*/
将 @month_begin_date,@month_end_date
这两个值带到你的 逻辑条件中

------解决方案--------------------
SQL code

--获取某年某月总共有多少天
DECLARE @年月 VARCHAR(8)
SET @年月='201202'
SELECT day(dateadd(month,1,@年月+ '01 ')-1)
--29

------解决方案--------------------
SQL code

--本月的开始日期

select convert(varchar(10),dateadd(dd,-DatePart(day,dateadd(dd,-1,getdate())),getdate()),120)

--本月的最后一天日期
select convert(varchar(10),dateadd(dd,-DatePart(day,dateadd(MM,1,getdate())),dateadd(MM,1,getdate())),120) 
--本月多少天
select datepart(dd,dateadd(dd,-1,dateadd(mm,1,cast(cast(year(getdate()) as varchar)+'-'+cast(month(getdate()) as varchar)+'-01' as datetime))))

------解决方案--------------------
你穿两个参数,一个开始时间,一个结束时间。然后再把之间的日期给补全,再去同表关连查询,这个怎么样?
------解决方案--------------------
变化2012和3就行了,不用管大月小月闰年。
SQL code

select * from database where DATEPART(YEAR,date) = 2012 and MONTH(date) = 3

------解决方案--------------------
SQL code
declare @year int
declare @month int
set @year=2012
set @month=1
select * from database where date between dateadd(day,0,convert(varchar(4),@year)  +'-'+convert(varchar(2),@month)+'-01') and
 dateadd(day,-1,convert(varchar(4),@year)  +'-'+convert(varchar(2),@month+1)+'-01')

------解决方案--------------------
那你就在程序里面处理时间不就是了么