SQL查询某个月的数据,帮忙啊

basey 2012-05-18 02:14:01
我想在用户选择某个月份时,查询数据库并列出该月的数据清单。

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

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

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

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

请教一下这个怎么解决?
...全文
1481 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
十三门徒 2012-05-18
  • 打赏
  • 举报
回复
那你就在程序里面处理时间不就是了么
basey 2012-05-18
  • 打赏
  • 举报
回复
我好像用不了这些Datediff,Datepart函数啊?我是做asp网页时查询mdb数据库用的。
十三门徒 2012-05-18
  • 打赏
  • 举报
回复
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')
孤独加百列 2012-05-18
  • 打赏
  • 举报
回复
变化2012和3就行了,不用管大月小月闰年。

select * from database where DATEPART(YEAR,date) = 2012 and MONTH(date) = 3
  • 打赏
  • 举报
回复
你穿两个参数,一个开始时间,一个结束时间。然后再把之间的日期给补全,再去同表关连查询,这个怎么样?
Felixzhaowenzhong 2012-05-18
  • 打赏
  • 举报
回复

--本月的开始日期

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-05-18
  • 打赏
  • 举报
回复

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

Felixzhaowenzhong 2012-05-18
  • 打赏
  • 举报
回复

--根据传入的日期参数获取当前月的起止日期
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
这两个值带到你的 逻辑条件中
qxyywy 2012-05-18
  • 打赏
  • 举报
回复
SELECT * FROM
database WHERE DATEDIFF(m,date ,'2012-5-1')=0
ORDER BY date

其中的2012-5-1自己通过选择的年月组合成一个2012年5月的任何一天都可以
kangkang08 2012-05-18
  • 打赏
  • 举报
回复
datediff

DECLARE @inputDate datetime

SELECT ,,, FROM 表 WHERE DATEDIFF(MONTH,[date],@InputDate) = 0
--小F-- 2012-05-18
  • 打赏
  • 举报
回复
写存储过程 传参数。

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧