将指定日期所在月份的所有日期按照周次输出
2007-04-29 15:17
381 查看
google_ad_client = "pub-2048279401139630";google_ad_slot = "8856771542";google_ad_width = 728;google_ad_height = 90;document.write("");
/**//*********************************************************
*作者:水若寒
*QQ:49940396
*Email:shuiruohanilove@sina.com
*日期:2007-4-29
*描述:将指定日期所在月份的所有日期按照周次输出
**********************************************************/
declare @i int-----------------------------计数器
declare @curWk int-------------------------指定日期在该年的周数
declare @fstWk int-------------------------每月一号在该年的周数
declare @fstDay nvarchar(10)---------------每月的第一天
declare @lstDay nvarchar(10)---------------每月的最后一天
declare @tmpDay smalldatetime--------------每周日的日期
declare @date smalldatetime----------------指定的日期
declare @tmpDay1 smalldatetime-------------每周六的日期
set @date = '2007-9-1'
select @fstDay=(cast(year(@date) as nvarchar(4))+'-'+ cast(month(@date) as nvarchar(2))+'-'+'1')
set @fstDay = Convert(nvarchar(10),cast(@fstDay as smalldatetime),120)
--print '本月第一天:'+@fstDay
set @fstWk = datepart(wk,@fstDay)
--print '本月第一周:'+str(@fstWk)
set @lstDay = Convert(nvarchar(10),dateadd(d,-1,dateadd(m,1,@fstDay)),120)
--print '本月最后一周:'+@lstDay
set @i=0
----找出跟上个月同一周的日期
while(@i<8)
begin
set @tmpDay = dateadd(dd,@i,@fstDay)
set @curWk = datepart(wk,@tmpDay)
if @curWk>@fstWk
begin
--print @tmpDay
break
end
set @i = @i+1
end
--print '本月第二周:'+convert(nvarchar(10),@tmpDay,120)
set @i=1
----找出这个月的日期
while(@i<7)
begin
if(@i=1)----------------如果是第一周,直接输出结果
begin
print('第'+str(@i)+'周:'+@fstDay+'--------'+convert(nvarchar(10),DateAdd(d,-1,@tmpDay),120))
set @i=@i+1
end
/**//*
*如果周日的日期还在该月内则继续下面的循环
**/
if(datediff(d,@tmpDay,@lstDay)>=0)
begin
set @tmpDay1 = DateAdd(d,6,@tmpDay)------周六的日期就是周日的日期加六就可以
/**//*
*如果周六的日期超过该月最后一天,则直接输出周日跟该月最后一天,否则输出周日跟周六
**/
if(DateDiff(d,@lstDay,@tmpDay1)>0)--超过该月最后一天,则直接输出周日跟该月最后一天
begin
print('第'+str(@i)+'周:'+Convert(nvarchar(10),@tmpDay,120)+'--------'+convert(nvarchar(10),@lstDay,120))
end
else--输出周日跟周六
print('第'+str(@i)+'周:'+Convert(nvarchar(10),@tmpDay,120)+'--------'+convert(nvarchar(10),@tmpDay1,120))
end
set @tmpDay=DateAdd(d,7,@tmpDay)----算出下周日的日期
if (datediff(d,@tmpDay,@lstDay)<0)--如果周日的日期超过该月的最后一天,则退出循环
break
set @i=@i+1
end
/**//*********************************************************
*作者:水若寒
*QQ:49940396
*Email:shuiruohanilove@sina.com
*日期:2007-4-29
*描述:将指定日期所在月份的所有日期按照周次输出
**********************************************************/
declare @i int-----------------------------计数器
declare @curWk int-------------------------指定日期在该年的周数
declare @fstWk int-------------------------每月一号在该年的周数
declare @fstDay nvarchar(10)---------------每月的第一天
declare @lstDay nvarchar(10)---------------每月的最后一天
declare @tmpDay smalldatetime--------------每周日的日期
declare @date smalldatetime----------------指定的日期
declare @tmpDay1 smalldatetime-------------每周六的日期
set @date = '2007-9-1'
select @fstDay=(cast(year(@date) as nvarchar(4))+'-'+ cast(month(@date) as nvarchar(2))+'-'+'1')
set @fstDay = Convert(nvarchar(10),cast(@fstDay as smalldatetime),120)
--print '本月第一天:'+@fstDay
set @fstWk = datepart(wk,@fstDay)
--print '本月第一周:'+str(@fstWk)
set @lstDay = Convert(nvarchar(10),dateadd(d,-1,dateadd(m,1,@fstDay)),120)
--print '本月最后一周:'+@lstDay
set @i=0
----找出跟上个月同一周的日期
while(@i<8)
begin
set @tmpDay = dateadd(dd,@i,@fstDay)
set @curWk = datepart(wk,@tmpDay)
if @curWk>@fstWk
begin
--print @tmpDay
break
end
set @i = @i+1
end
--print '本月第二周:'+convert(nvarchar(10),@tmpDay,120)
set @i=1
----找出这个月的日期
while(@i<7)
begin
if(@i=1)----------------如果是第一周,直接输出结果
begin
print('第'+str(@i)+'周:'+@fstDay+'--------'+convert(nvarchar(10),DateAdd(d,-1,@tmpDay),120))
set @i=@i+1
end
/**//*
*如果周日的日期还在该月内则继续下面的循环
**/
if(datediff(d,@tmpDay,@lstDay)>=0)
begin
set @tmpDay1 = DateAdd(d,6,@tmpDay)------周六的日期就是周日的日期加六就可以
/**//*
*如果周六的日期超过该月最后一天,则直接输出周日跟该月最后一天,否则输出周日跟周六
**/
if(DateDiff(d,@lstDay,@tmpDay1)>0)--超过该月最后一天,则直接输出周日跟该月最后一天
begin
print('第'+str(@i)+'周:'+Convert(nvarchar(10),@tmpDay,120)+'--------'+convert(nvarchar(10),@lstDay,120))
end
else--输出周日跟周六
print('第'+str(@i)+'周:'+Convert(nvarchar(10),@tmpDay,120)+'--------'+convert(nvarchar(10),@tmpDay1,120))
end
set @tmpDay=DateAdd(d,7,@tmpDay)----算出下周日的日期
if (datediff(d,@tmpDay,@lstDay)<0)--如果周日的日期超过该月的最后一天,则退出循环
break
set @i=@i+1
end
相关文章推荐
- 【原创】SQL 返回时间所在月份周次,该周起始结束日期
- 获取指定日期所在月份的第一天
- 编写方法,输出给定日期所在月份的第一天和最后一天
- 输出指定日期范围内,为"星期一"的所有日期
- SqlServer:一个返回指定日期所在月份的最大天数的标量值函数
- 取得指定日期所在月份的天数--一个欠抽算法
- SQL 获取指定月份的所有日期,SQL日期分页
- php 获取指定日期所在月份的最后一天
- SQL 输出某一天所在的年月对应的所有星期的开始与结束日期(每个月仅算4周,第四周可能会有10天)
- JavaScript-判断指定日期是一年中第几天-按照从大到小的顺序输出
- 输出从指定开始时间到指定截止时间的所有日期
- sql通过查询一个指定日期(如2018-02-23),可以知道指定日期所在月份剩余天数和剩余周末天数
- 递归方式生成指定月份所有日期
- js得到连两个时间段之间所有的年-月 获取当前日期 格式化日期 根据指定日期得到该日期该月份的最后一天
- mssql中获取指定日期所在月份的第一天的代码
- java如何输出指定两个日期之间的所有日期
- 编程题:计算2个日期之间包括所有月份,输出格式类似如’2015-05’
- oracle 根据一个时间段获取这个时间段内所有月份、天数、日期
- log4j自定义级别并将新级别日志信息输出到指定带日期格式的log文件