sqlserver 计算当月所有自然周的区间。

根据提供的文件信息,我们可以了解到这段代码的主要目的是在SQL Server中计算出指定月份的所有自然周的起始和结束日期,并将这些信息存储在一个名为`monthWeekBetween`的表中。接下来,我们将详细解释其中的关键概念、代码逻辑以及实现原理。 ### 1. 自然周的概念 在日历系统中,“自然周”通常指的是从周一到周日的一段时间。例如,如果一个月的第一天是周二,那么这个月的第一个自然周将会从第一个周二开始直到第一个周日结束,第二个自然周则会从第二个周一持续到第二个周日。这种方法能够确保每个“周”都完整地包含了七天的时间段。 ### 2. SQL Server中的日期函数 在SQL Server中,处理日期和时间数据时会用到一些内置的函数,例如: - `DATEADD()`:用于增加或减少日期值。 - `DATEPART()`:返回指定日期的特定部分(如年份、月份、日等)。 - `CONVERT()`:将一个表达式转换为另一个数据类型,这里用来转换日期格式。 ### 3. 创建存储自然周信息的表 在给出的代码片段中,首先创建了一个名为`monthWeekBetween`的表,该表用于存储每个月内所有自然周的开始和结束日期。每个自然周对应两列,分别表示这一周的开始日期和结束日期。 ```sql CREATE TABLE [dbo].[monthWeekBetween]( [mwb_year] [int] NULL, [mwb_month] [int] NULL, [mwb_b_week1] [varchar](10) NULL, [mwb_e_week1] [varchar](10) NULL, [mwb_b_week2] [varchar](10) NULL, [mwb_e_week2] [varchar](10) NULL, [mwb_b_week3] [varchar](10) NULL, [mwb_e_week3] [varchar](10) NULL, [mwb_b_week4] [varchar](10) NULL, [mwb_e_week4] [varchar](10) NULL, [mwb_b_week5] [varchar](10) NULL, [mwb_e_week5] [varchar](10) NULL, [mwb_b_week6] [varchar](10) NULL, [mwb_e_week6] [varchar](10) NULL ) ON [PRIMARY] ``` ### 4. 计算并填充自然周数据 接下来的部分是通过存储过程`getmonthWeekBetween`来计算并填充每个月的自然周信息。具体步骤如下: - **初始化变量**:定义了几个变量用于存储月份的开始日期(`@beg_time`)、结束日期(`@end_time`)以及周的数量(`@weekSize`)。 - **确定月份的开始与结束日期**: - 使用`DATEADD()`函数获取指定月份的下个月第一天,然后减去当前月份最后一天的日期得到当前月份的结束日期。 - 开始日期设置为当前月份的第一天。 - **计算周的数量**:根据月份的开始日期和结束日期计算出包含多少个完整的自然周。 - **插入数据**:使用动态SQL语句构建插入语句,将计算好的每周的开始和结束日期插入到`monthWeekBetween`表中。 ### 5. 实现细节 - **动态SQL构造**:使用循环结构生成对应的SQL插入语句,对于不足五个自然周的情况,使用空字符串填充剩余的列。 - **执行存储过程**:通过`EXEC`关键字执行构建好的动态SQL语句。 这段代码提供了一种在SQL Server中计算和存储指定月份所有自然周起始和结束日期的方法。这种方法利用了SQL Server的强大功能来有效地处理日期相关的计算任务。
























--delete monthWeekBetween
CREATE TABLE [dbo].[monthWeekBetween](
[mwb_year] [int] NULL,
[mwb_month] [int] NULL,
[mwb_b_week1] [varchar](10) NULL,
[mwb_e_week1] [varchar](10) NULL,
[mwb_b_week2] [varchar](10) NULL,
[mwb_e_week2] [varchar](10) NULL,
[mwb_b_week3] [varchar](10) NULL,
[mwb_e_week3] [varchar](10) NULL,
[mwb_b_week4] [varchar](10) NULL,
[mwb_e_week4] [varchar](10) NULL,
[mwb_b_week5] [varchar](10) NULL,
[mwb_e_week5] [varchar](10) NULL,
[mwb_b_week6] [varchar](10) NULL,
[mwb_e_week6] [varchar](10) NULL
) ON [PRIMARY]
exec getmonthWeekBetween 2015,12
create proc getmonthWeekBetween
@year int,--传入年度
@month int --月度
as
begin
declare @beg_time varchar(10)--月初时间
declare @end_time varchar(10)--月末时间

- bisirbisir2016-01-22坑啊!!一堆报错!坑分啊呀!!

- 粉丝: 0
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 2022年Autodesk公司CAD工程师认证考试题合集.doc
- 网络营销部一季度总结及后期工作安排.doc
- 高级软件工程.pptx
- 基于单片机的超速报警器课程设计.doc
- 星星网络公司创业计划书样本.doc
- 小学道德与法治网络培训总结(可编辑修改word版).doc
- CAD块库定义及使用.ppt
- 网络经济下财务管理透析.doc
- 网络营销目标市场选择.ppt
- 上海商情广告yes精密机械行业网络营销方案.pptx
- 电子商务职业生涯规划书.docx
- 西安电子科技大学电子与通信工程领域专业学位工程硕士研究分析生卓越工程师培养方案.doc
- 软件测试报告编写指南.doc
- 中国象棋博弈算法研究.doc
- 项目管理项目信息接收责任明细表样本.doc
- 工作组环境中网络访问.ppt


