SQL查询某个月的数据,帮忙啊该如何解决
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查询的时候发现不好处理。
比如 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')
------解决方案--------------------
那你就在程序里面处理时间不就是了么