通过SQL得到某年内每周的开始日期和结束日期
2007-08-17 09:35
369 查看
示例效果为:
得到某年内每周的开始日期和结束日期
每周以周日为第一天
一周以至少还有四天为计
如
2004/01/01 是已经周四
那么2004年的第一周从2004/01/04开始
2007/12/31 是周二
那么2007年的最后一周只到2007/12/19开始
那么2008年的第一周从2007/12/30开始
相关代码如下:
--------------
1.tWeek表
CREATE TABLE [tWeek] (
[tSeqID] [int] IDENTITY (1, 1) NOT NULL ,
[tYear] [int] NULL ,
[tWeekSeq] [int] NULL ,
[tStartDate] [datetime] NULL ,
[tEndDate] [datetime] NULL ,
CONSTRAINT [PK_tWeek] PRIMARY KEY CLUSTERED
(
[tSeqID]
) ON [PRIMARY]
) ON [PRIMARY]
GO
2.生成相关数据的SQL语句
DECLARE @SYear int --开始年份
DECLARE @EYear int --结束年份
SET DATEFIRST 7 --设周日为每周第一天
SET @SYear = 2004
SET @EYear = 2010
--周以至少四天为计
--判断第一周的开始与结束
DECLARE @YSDate DATETIME --年的第一周开始时间
DECLARE @YEDate DATETIME --年的最后周结束时间
DECLARE @WSDate DATETIME --用于循环的年内某周的开始日期
DECLARE @WEDate DATETIME --用于循环的年内某周的开始日期
DECLARE @IWeek int --当前周为本年的第几周
WHILE @SYear<=@EYear
BEGIN--BEGIN WHILE YEAR
SET @YSDate= CAST( (CAST( @SYear AS VARCHAR(4) )+'/01/01') AS DATETIME)
SET @YEDate= CAST( (CAST( @SYear AS VARCHAR(4) )+'/12/31') AS DATETIME)
SET @IWeek=1
IF DATEPART(DW,@YSDate)>4--第一周已不足4天 从第二周开始算第一周
BEGIN
SET @YSDate= DATEADD(DAY,(8-DATEPART(DW,@YSDate)) ,@YSDate)--本周开始日期
END
ELSE--第一周足4天 从本周日算第一天
BEGIN
SET @YSDate= DATEADD(Day,(-(DATEPART(DW,@YSDate)-1)) ,@YSDate)
END
SET @WSDate = @YSDate
SET @WEDate= DATEADD(DAY,6,@WSDate) --本周结束日期
WHILE DATEDIFF(DAY,@WSDate,@YEDate)>=4
BEGIN
--执行Insert
INSERT INTO tWeek(tYear, tWeekSeq, tStartDate, tEndDate)
VALUES(@SYear,@IWeek,@WSDate,@WEDate)
--重置参数
SET @IWeek=@IWeek+1
SET @WSDate=@WSDate+7
SET @WEDate=@WEDate+7
END
SET @SYear=@SYear+1
END--END WHILE YEAR
3.生成的tWeek表内部分数据示例
顺序号 年份 第几周 该周开始日期 该周结束日期
tSeqID tYear tWeekSeq tStartDate tEndDate
1 2004 1 2004-01-04 00:00:00.000 2004-01-10 00:00:00.000
2 2004 2 2004-01-11 00:00:00.000 2004-01-17 00:00:00.000
...
208 2007 52 2007-12-23 00:00:00.000 2007-12-29 00:00:00.000
209 2008 1 2007-12-30 00:00:00.000 2008-01-05 00:00:00.000
得到某年内每周的开始日期和结束日期
每周以周日为第一天
一周以至少还有四天为计
如
2004/01/01 是已经周四
那么2004年的第一周从2004/01/04开始
2007/12/31 是周二
那么2007年的最后一周只到2007/12/19开始
那么2008年的第一周从2007/12/30开始
相关代码如下:
--------------
1.tWeek表
CREATE TABLE [tWeek] (
[tSeqID] [int] IDENTITY (1, 1) NOT NULL ,
[tYear] [int] NULL ,
[tWeekSeq] [int] NULL ,
[tStartDate] [datetime] NULL ,
[tEndDate] [datetime] NULL ,
CONSTRAINT [PK_tWeek] PRIMARY KEY CLUSTERED
(
[tSeqID]
) ON [PRIMARY]
) ON [PRIMARY]
GO
2.生成相关数据的SQL语句
DECLARE @SYear int --开始年份
DECLARE @EYear int --结束年份
SET DATEFIRST 7 --设周日为每周第一天
SET @SYear = 2004
SET @EYear = 2010
--周以至少四天为计
--判断第一周的开始与结束
DECLARE @YSDate DATETIME --年的第一周开始时间
DECLARE @YEDate DATETIME --年的最后周结束时间
DECLARE @WSDate DATETIME --用于循环的年内某周的开始日期
DECLARE @WEDate DATETIME --用于循环的年内某周的开始日期
DECLARE @IWeek int --当前周为本年的第几周
WHILE @SYear<=@EYear
BEGIN--BEGIN WHILE YEAR
SET @YSDate= CAST( (CAST( @SYear AS VARCHAR(4) )+'/01/01') AS DATETIME)
SET @YEDate= CAST( (CAST( @SYear AS VARCHAR(4) )+'/12/31') AS DATETIME)
SET @IWeek=1
IF DATEPART(DW,@YSDate)>4--第一周已不足4天 从第二周开始算第一周
BEGIN
SET @YSDate= DATEADD(DAY,(8-DATEPART(DW,@YSDate)) ,@YSDate)--本周开始日期
END
ELSE--第一周足4天 从本周日算第一天
BEGIN
SET @YSDate= DATEADD(Day,(-(DATEPART(DW,@YSDate)-1)) ,@YSDate)
END
SET @WSDate = @YSDate
SET @WEDate= DATEADD(DAY,6,@WSDate) --本周结束日期
WHILE DATEDIFF(DAY,@WSDate,@YEDate)>=4
BEGIN
--执行Insert
INSERT INTO tWeek(tYear, tWeekSeq, tStartDate, tEndDate)
VALUES(@SYear,@IWeek,@WSDate,@WEDate)
--重置参数
SET @IWeek=@IWeek+1
SET @WSDate=@WSDate+7
SET @WEDate=@WEDate+7
END
SET @SYear=@SYear+1
END--END WHILE YEAR
3.生成的tWeek表内部分数据示例
顺序号 年份 第几周 该周开始日期 该周结束日期
tSeqID tYear tWeekSeq tStartDate tEndDate
1 2004 1 2004-01-04 00:00:00.000 2004-01-10 00:00:00.000
2 2004 2 2004-01-11 00:00:00.000 2004-01-17 00:00:00.000
...
208 2007 52 2007-12-23 00:00:00.000 2007-12-29 00:00:00.000
209 2008 1 2007-12-30 00:00:00.000 2008-01-05 00:00:00.000
相关文章推荐
- 通过SQL得到某年内每周的开始日期和结束日期
- 通过SQL得到某年内每周的开始日期和结束日期
- 通过SQL得到某年内每周的开始日期和结束日期
- ios 得到每周的星期一开始和星期天结束的日期
- ios 得到每周的星期一开始和星期天结束的日期
- 【iOS解决方案】得到每周的星期一开始和星期天结束的日期
- 在SQL里通过语句得到当前日期是星期几
- 通过今天的日期,获得本周,本月,上月,本年的开始结束日期
- java 根据开始和结束日期得到之间所有日期集合
- 当前日期得到本周的开始和结束日期
- SQL检测开始日期 结束日期 是否存在交叉
- 项目经验:通过开始时间、结束时间查询日期to_char()
- js根据开始日期和结束日期得到中间的所有日期
- php根据开始日期和结束日期得到时间数组
- sql获取该周的开始结束日期
- PHP计算一年多少个星期和每周的开始和结束日期
- android 通过当前日期获取这个礼拜的开始时间和结束时间
- [C#基础] 得到指定周数的开始和结束日期
- PHP获取一年有几周以及每周开始日期和结束日期
- php根据开始日期和结束日期得到时间数组