SQL问题:查询指定时间段内每个月的天数

guguda2008 2009-10-22 09:59:08
DECLARE @BDATE DATETIME,@EDATE DATETIME
SELECT @BDATE='2009-2-5',@EDATE='2009-10-21'

查询指定时间段内每个月的天数,怎么写好呢?我的思路似乎有点麻烦,求简洁的思路和代码
...全文
711 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangfeier 2009-10-28
  • 打赏
  • 举报
回复
顶一下
fhjzgsy 2009-10-22
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 hero__stone 的回复:]
SQL codeDECLARE@BDATEDATETIME,@EDATEDATETIMESELECT@BDATE='2009-2-5',@EDATE='2009-10-21'select mon=convert(varchar(7),dateadd(day,number,@bdate),120),[day]=count(*)from master..spt_values swhere type='¡­
[/Quote]
dateadd(day,number,@bdate)中 number代表的是什么意思
为什么我在sql2005查询分析器中直接运行就不出结果呢
初学,不太懂
jiangshun 2009-10-22
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 sql77 的回复:]
引用 8 楼 liangck 的回复:
SQL codeDECLARE@BDATEDATETIME,@EDATEDATETIMESELECT@BDATE='2009-2-5',@EDATE='2009-10-21'SELECTCONVERT(varchar(7),DATEADD(month,number,CONVERT(varchar(7),@BDATE,120)+'-01'),120)AS YearMonth,DATEDIFF(day¡­

同意写法
[/Quote]

同一个鸟啊,人家是从2月5号算的,也就是二月份的天数是28-5=23天了
好汉坡 2009-10-22
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 guguda2008 的回复:]
恩。。。。7L应该是对的
梁哥那个也有参考价值,都COPY回去学习,谢谢,结账~~
[/Quote]
dawugui 2009-10-22
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 guguda2008 的回复:]
恩。。。。7L应该是对的
梁哥那个也有参考价值,都COPY回去学习,谢谢,结账~~
[/Quote]
蹭个分.
guguda2008 2009-10-22
  • 打赏
  • 举报
回复
恩。。。。7L应该是对的
梁哥那个也有参考价值,都COPY回去学习,谢谢,结账~~
好汉坡 2009-10-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 guguda2008 的回复:]
引用 3 楼 jiangshun 的回复:
什么意思啊?2-5那二月份应该算从5号开始的吗?

对,得到的结果应该类似于
2009-02  XX
2009-03  XX
.....
2009-10  XX

这样的
[/Quote]

晕,不是说,从5号开始算的吗?
SQL77 2009-10-22
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 liangck 的回复:]
SQL codeDECLARE@BDATEDATETIME,@EDATEDATETIMESELECT@BDATE='2009-2-5',@EDATE='2009-10-21'SELECTCONVERT(varchar(7),DATEADD(month,number,CONVERT(varchar(7),@BDATE,120)+'-01'),120)AS YearMonth,DATEDIFF(day¡­
[/Quote]
同意写法
liangCK 2009-10-22
  • 打赏
  • 举报
回复
DECLARE @BDATE DATETIME,@EDATE DATETIME
SELECT @BDATE='2009-2-5',@EDATE='2009-10-21'

SELECT
CONVERT(varchar(7),DATEADD(month,number,CONVERT(varchar(7),@BDATE,120)+'-01'),120) AS YearMonth,
DATEDIFF(day,DATEADD(month,number,CONVERT(varchar(7),@BDATE,120)+'-01'),
DATEADD(month,1,DATEADD(month,number,CONVERT(varchar(7),@BDATE,120)+'-01'))) AS days
FROM master.dbo.spt_values
WHERE type = 'p'
AND DATEADD(month,number,CONVERT(varchar(7),@BDATE,120)+'-01')
<= CONVERT(varchar(7),@EDATE,120)+'-01'

/*
YearMonth days
--------- -----------
2009-02 28
2009-03 31
2009-04 30
2009-05 31
2009-06 30
2009-07 31
2009-08 31
2009-09 30
2009-10 31

(9 行受影响)


*/
好汉坡 2009-10-22
  • 打赏
  • 举报
回复

DECLARE @BDATE DATETIME,@EDATE DATETIME
SELECT @BDATE='2009-2-5',@EDATE='2009-10-21'

select mon=convert(varchar(7),dateadd(day,number,@bdate),120),[day]=count(*)
from master..spt_values s
where type='p' and dateadd(day,number,@bdate)<=@EDATE
group by convert(varchar(7),dateadd(day,number,@bdate),120)

mon day
------- -----------
2009-02 24
2009-03 31
2009-04 30
2009-05 31
2009-06 30
2009-07 31
2009-08 31
2009-09 30
2009-10 21

(9 行受影响)
liangCK 2009-10-22
  • 打赏
  • 举报
回复
N多了吧?
guguda2008 2009-10-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jiangshun 的回复:]
什么意思啊?2-5那二月份应该算从5号开始的吗?
[/Quote]
对,得到的结果应该类似于
2009-02 XX
2009-03 XX
.....
2009-10 XX

这样的
好汉坡 2009-10-22
  • 打赏
  • 举报
回复
不会
jiangshun 2009-10-22
  • 打赏
  • 举报
回复
什么意思啊?2-5那二月份应该算从5号开始的吗?
--小F-- 2009-10-22
  • 打赏
  • 举报
回复
帮顶
wzy_love_sly 2009-10-22
  • 打赏
  • 举报
回复
不会

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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