通过SQL得到某年内每周的开始日期和结束日期

SQL SERVER 通过SQL得到一百年内每周开始日期结束日期 SQL SERVER 周 开始结束 阅读详情

示例效果为:
得到某年内每周的开始日期和结束日期
每周以周日为第一天
一周以至少还有四天为计


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

来源:http://www.cnblogs.com/freeliver54/archive/2007/08/17/859224.html

数据分析师、工程师、科学家:一条需求流水线上的真实分工 数据岗位不是静态标签,而是围绕业务需求动态协作的技术角色体系。从‘查数据’到‘造数据’,核心在于理解数据生命周期中的职责边界与能力重心:SQL是三类角色的共同基础,但深度指向不同目标——分析师聚焦业务语义与口径对齐,工程师保障数据链路的稳定性与可维护性,科学家专注问题解耦与效果归因。这种分工差异源于故障防御域、工具不可替代性及知识迁移成本的真实约束。在零售、SaaS、教育等中型数据项目中,三者通过需求理解、数据准备、建模分析等6个阶段紧密咬合,形成可验证、可复盘、可踩坑的工程化协作流。 阅读详情

相关推荐

企业级技术交付全生命周期服务方法论

企业级技术交付不是单纯写代码或部署系统,而是覆盖需求分析、架构设计、项目管理、用户培训与持续运营的全生命周期工程实践。其核心在于弥合IT能力与业务现实之间的断层,通过务实技术选型(如.NET Core、Vue 2、SQL Server)、场景化沙箱培训、灰度上线护航组织能力共建等机制,将抽象技术转化为可衡量的业务价值(如审批时效压缩65%、故障率下降至2.3%)。这类交付强调‘开发即治理’‘培训即赋能’‘架构即适配’,尤其适用于制造业、金融、政务等基础设施陈旧、组织协同复杂、ROI要求明确的传统行业客户。

352

SQL SERVER 获取年、季、月、周、日开始时间结束时间

--返回开始时间结束时间 格式:dbo.GetDateStartFirstAndLast(type,datetype,datetime,time) Type 日期类型:(“-”为前一期间,无符号为当期,“+”为后一期间),Y 年,Q 季,M 月,W 周,D 日 例:前一年:-Y,当年:Y,+Y:下一年 datetype : ‘S’返回开始时间,'E'返回结束时间 datetime: 按哪个时间进行推算 time: 返回的时间点,如果时间点为8点,返回的结束时间为第二天的8点,例如获取8月最后一天的结束时间,以8点计,则返回值为 2022-09-01 07:59:59.997 select dbo.GetDateStartFirstAndLast('-q','s','2022-08-03',0) 返:2022-04-01 00:00:00.000 上季度开始时间0点 select dbo.GetDateStartFirstAndLast('-q','e','2022-08-03',8) 返:2022-07-01 07:59:59.997 上季度结束时间8点

[MSSQL]根据年得到所有星期日的日期

go --创建函数 create function GetWeekDays(@year int) returns @t table (星期天varchar(20)) as begin insert @t select substring(convert(varchar,dateadd(day,x,col),120),1,10) from ( select cast(cast(@y

德仔 1382

SQL计算一年内有多少天是星期一、二、三、四、五、六、日

declare @a varchar (20) select @a='2021' if object_id(N'tempdb..#t',N'U') is not null drop table #t create table #t (rq datetime) declare @b datetime select @b=(select DATEADD (year, DATEDIFF(year,0,@a),0)) while @b<(select DATEADD(year, DATEDIFF (year,

cpu0606的博客 891

Oralce- SQL按日历格式,查询输出-制作日历

SQL制作日历,按照日历格式输出。

jiamenghui008的博客 536

2022-07-07 sql查询关于时间日期的使用 (本周数据、上午,下午数据)

参考连接:mysql 查询本周,本月,本年数据sqlsql查询本周、本月数据需求:获取本周(周一到周日)的数据 date_format是将时间日期转换为时间格式,2022-07-07 09:48:33 转换为2022-07-07 YEARWEEK 是获取年份周数的一个函数,函数形式为 [,])......

ZT1090258642的博客 2073

SQL Server】sql获取一年,一月,一周的开始时间结束时间

年 select CONVERT(nvarchar(10),DATEADD(YY, DATEDIFF(YY, 0, GETDATE()), 0),121) --一年的开始时间 例子返回值:2019-01-01 select CONVERT(nvarchar(10), dateadd(MS, -3, DATEADD(YY, DATEDIFF(YY, 0, GETDATE()) + 1, 0...

小胡的博客 2367

求某年52(53)个星期的开始结束日期

 题外话:如果某一年的第一天,也就是1月1日元旦这天是星期日的话,那么这一年的星期总数绝对为53周。你可以数一数哦。 有些时侯,我们需要统计某个时间段的用户操作XX或登录次数的一个统计,不按天为单位,加入统计一年内的某个用户每个星期登录的次数,那么我们就需要这一年(52、53)星期的开始时间结束时间sql语句来where date between '开始时间' and '结束时间'   ...

javacdd的博客 526

sql 日期-周-月

1 declare @beginDate varchar(50) 2 set @beginDate = '2012-07-04' 3 select datepart(week,@beginDate) as 年内的第几周 4 select dateadd(day,1-(datepart(weekday,@beginDate)),@beginDate) as 本周开始日期-...

dehou1981的专栏 194

Oracle日期函数汇总

在网上找到的文档 Select to_char(sysdate,'ss') from dual取当前时间秒部分 Select to_char(sysdate,'mi') from dual取当前时间分钟部分 Select to_char(sysdate,'HH24') from dual取当前时间秒小时部分 Select to_char(sysdate,'DD') from dual取当前时...

qq_34462698的博客 2203

mysql 本周第一天本周最后一天_使用 T-SQL 计算当日日期、本周第一天与最后一天...

--当日日期DECLARE @Today NVARCHAR(100);SET @Today = DATENAME(YEAR, GETDATE()) + '-' + DATENAME(MONTH, GETDATE()) + '-' + DATENAME(DAY, GETDATE());--本周第一天与最后一天DECLARE @FirstDay INT, @LastDay INTSET @FirstD...

weixin_36259438的博客 1655

最近写sql语句的一个总结

1.在碰到求取连续的问题的时候,有2种思路,   (1)可以将表的数据错位,就可以将前一条数据后一条数据放在同一行,进行对比   (2)可以使用row_number(),比如在nba题目中,求取连续夺冠球队的开始年份结束年份  --本题求取连续获得夺冠的nba球队,以及开始时间结束时间 nba的题目中用到的函数max(),min(),over() over()分析函数主要是用于计

ghost_9707的博客 1609

mysql支持时间范围内_mysql自定义函数计算时间段内的工作日(支持跨年)

①同一年的情况下计算工作日函数CREATE DEFINER=`root`@`%` FUNCTION `WORKDAYSONEYEAR`(`datefrom` datetime,`dateto` datetime) RETURNS int(20)NO SQLBEGINdeclare days int default 1;# 如果起始时间大于结束时间或者日期跨年那么直接返回-1,表示不支持if (d...

weixin_39805906的博客 265

30天再入院预测:医疗AI落地的临床可解释性实践

再入院预测是医疗质量管理价值医疗的核心指标,其本质是利用机器学习建模患者出院后短期风险,支撑DRG/DIP支付改革与临床路径优化。技术上需兼顾模型性能与临床可解释性,避免黑箱决策;实践中依赖多源异构数据融合(EMR、HIS、LIS及社会支持信息),并通过时间序列滚动验证应对数据漂移。关键价值在于将风险量化为可干预动作——如随访缺失、用药教育不足等流程缺陷特征,驱动护士、质控员医保管理者协同响应。本文聚焦30天全因再入院这一政策刚性指标,结合逻辑回归与XGBoost分层建模、SQL原生特征工程及HIS嵌入

weixin_30700099的博客 310
上一篇: SQL Server中如何获取当前年,月,日,时,分,秒
下一篇: 国家气象局提供的天气预报接口
tearsmo
博客等级 码龄17年 110粉丝 166原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值