测试所用的表:table24
结构及意义:
field1:主键序号
field2:日期
field3:当前日期是本年度的第几周(用来查询)
field4:星期几(如星期一)
field5:年份
建表SQL:
CREATE TABLE [dbo].[table24]( [field1] [int] IDENTITY(1,1) NOT NULL, [field2] [datetime] NULL, [field3] [int] NULL, [field4] [varchar](10) COLLATE Chinese_PRC_CI_AS NULL, [field5] [int] NULL, CONSTRAINT [PK_table24] PRIMARY KEY CLUSTERED ( [field1] ASC )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] GO SET ANSI_PADDING OFF GO EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'主键-序号' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'table24', @level2type=N'COLUMN', @level2name=N'field1' GO EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'日期' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'table24', @level2type=N'COLUMN', @level2name=N'field2' GO EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'当前是本年的第几周' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'table24', @level2type=N'COLUMN', @level2name=N'field3' GO EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'星期几' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'table24', @level2type=N'COLUMN', @level2name=N'field4' GO EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'年份' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'table24', @level2type=N'COLUMN', @level2name=N'field5'
生成指定年份的所有日期:
--测试: --测试默认值:exec getDateOfThisYear 0,0 ; --测试指定年份(补充以前的数据,不生成周末的数据):exec getDateOfThisYear 2017,1,0; --测试指定年份(不补充以前的数据,不生成周末的数据):exec getDateOfThisYear 2017,0,0; --测试指定年份(不补充以前的数据,生成周末的数据):exec getDateOfThisYear 2017,0,1; --测试指定年份(不补充以前的数据,不生成周末的数据):exec getDateOfThisYear 2017,0,0; --查看数据:select * from table24; ALTER PROCEDURE [dbo].[getDateOfThisYear] @cur_year int, --当前年份 @flag int, --是否补充以前的数据,1-补充,将当前系统中最晚时间以前的数据补充上去 0-不补充,直接从最晚时间开始,默认为不补充直接从系统最晚时间开始 @flag2 int --是否生成周六周日的数据,1-生成周六日的数据 0-不生成,默认不生成 AS BEGIN SET NOCOUNT ON; if(@cur_year is null or @cur_year<=0) begin set @cur_year = year(getDate());--赋值为当前年份 end if(@flag is null or @flag<0) begin set @flag = 0;--不补充,从系统最晚时间开始 end if(@flag2 is null or @flag2<0) begin set @flag2 = 0;--不生成周末时间 end --开始时间 declare @startTime varchar(10); if(@flag=0) begin --获取系统中今年最大的时间 select top 1 @startTime = dateadd(day,1,field2) from table24 where year(field2)=@cur_year order by field2 desc;--降序取第一条,并且计算出开始的时间 if(@startTime is null)--没有数据,取本周第一天,即周一 begin set @startTime = dateadd(wk, datediff(wk,0,getdate()), 0); end end else begin--补充以前的,那么从1月1号开始 set @startTime = cast(@cur_year as varchar(20))+'0101';--形如20170101 end --结束时间 declare @endTime varchar(10); set @endTime = cast((@cur_year+1) as varchar(20))+'0101';--形如20180101 --生成当前年份的数据 if(@flag2=1)--生成周六日的时间 begin insert into table24(field2,field5) select distinct dateadd(day,number,@startTime),@cur_year from master..spt_values where number>=0 and number<=365 and dateadd(day,number,@startTime) <@endTime and dateadd(day,number,@startTime) not in (select field2 from table24)--不允许重复 end else--不生成 begin insert into table24(field2,field5) select distinct dateadd(day,number,@startTime),@cur_year from master..spt_values where number>=0 and number<=365 and dateadd(day,number,@startTime) <@endTime and datepart(dw,dateadd(day,number,@startTime)) not in (1,7)--not in (1,7):不生成周六日的数据 and dateadd(day,number,@startTime) not in (select field2 from table24)--不允许重复 end --更新今年每个日期是是第几周,是星期几 update table24 set field3=datepart(week,field2),field4=datename(dw,field2) where field5=@cur_year; --更新以前的数据 --update table24 set field3=datepart(week,field2),field4=datename(dw,field2),field5=year(field2) where field4 is null or field5 is null; END --select datepart(weekday,getdate()) as '周内的第几日' --select datepart(week,getdate()) as '年内的第几周' --select datepart(quarter,getdate()) as 年内的第几季' --select datename(dw,getdate()) as '当前是星期几' --可返回汉字形式的星期 --select datepart(dw,'20170909') as '当前是星期几' --可返回数字形式的星期(1-星期日 2-星期一 3-星期二 以此类推) /*--生成一年的数据 insert tb select distinct dateadd(day,number,'20130101') from master..spt_values where number>=0 and number<=365 and dateadd(day,number,'20130101') <'20140101' and dateadd(day,number,'20130101') not in (select date from tb) */
生成本周的所有日期:
--测试: exec getDateOfWeek; CREATE PROCEDURE [dbo].[getDateOfWeek] AS BEGIN SET NOCOUNT ON; /* --获取当前周的第一天,也就是这周的周一是哪天 declare @mon datetime; select @mon = dateadd(wk, datediff(wk,0,getdate()), 0); */ --获取当前周是第几周 declare @weekes int; select @weekes = dbo.WeekOfMonth(getDate()); --循环添加数据 declare @count int; declare @c int; set @count = 6; set @c = 0; while(@c<=@count) begin insert into table24(field2,field5) select dateadd(wk, datediff(wk,0,getdate()), @c),year(getDate()); set @c = @c +1; end update table24 set field3=datepart(week,field2),field4=datename(dw,field2) where field5=year(getDate()); END
相关推荐
在数据库脚本开发中,有时需要生成一堆连续数字或者日期,例如yearly report就需要连续数字做年份,例如daily report就需要生成一定时间范围内的每一天日期。 而自带的系统表master..spt_values存在一定的局限性,...
在网上搜了半天,都没有看到满意的程序。只好参照别人写的例子,自己写了。编号是按照年份和月份+三位序号自动生成的,用的是SQL server数据库,用VS2010编写的。调试已通过。希望给同为新手的各位一个参考。
3. 打印仓库账本程序,给定年份和物料,打印物料代码、名称、规格、计量单位、各日期的进仓、出仓和库存量。 资源包含: 1.系统源码 2.数据库及脚本 3.部分1详细说明报告 4.部分2详细说明报告 5.部分3详细说明报告...
Source参数可以是一个Command对象名称、一段SQL命令、一个指定的数据表名称或是一个Stored Procedure。假如省略这个参数,系统则采用Recordset对象的Source属性。 ActiveConnection Recordset对象可以通过...
SQL SERVER 的函数 1.字符串函数 长度与分析用 datalength(Char_expr) 返回字符串包含字符数,但不包含后面的空格 substring(expression,start,length) 不多说了,取子串 right(char_expr,int_expr...
GetSqlServer 列出所有网络上的SQL Server IpToMAC 根据IP得到MAC地址 邮件函数: SmtpCreate 创建一个SMTP发送邮件的句柄 SmtpNewMail 在内存中创建邮件内容,等待发送 SmtpSend 发送邮件 ...
sqlserver数据库支持需要请留言:【本地留言】 四、友情提醒 推荐通过火狐浏览器(FireFox)使用该系统,体验效果更佳。 五、软件简介 【普教版】高博成绩管理系统是一套面向学前、小学、初中、高中不同学制不同年...
数据库系统:sqlserver 2005 JAVA平台:JDK1.5 J2EE1.4 WEB服务器: Tomcat 6.0 客户端操作系统: WINDOWS2000、WINDOWS XP 客户端浏览器:IE7.0或以上版本 2)系统开发工具 Eclipse 3.3+MyEclipse 6.5 + Tomcat...
新生命开源项目矩阵各项目默认支持net4.5/net4.0/netstandard2.0项目年份状态.NET Core说明基础组件支撑其它中间件以及产品项目2002维护中√算法、日志、网络、RPC、序列化、缓存、多线程2005维护中√数据中间件,...
163.如何获取SQL Server服务器端所有数据库列表 164.如何保存图片文件到SQL Server数据库 165.如何将数据库中保存的图片显示到页面中 166.如何在插入记录后获得记录的标识号 167.如何解决ADO.NET访问ACCESS...
sqlserver数据库支持需要请留言:【本地留言】 四、友情提醒 推荐通过火狐浏览器(FireFox)使用该系统,体验效果更佳。 五、软件简介 【普教版】高博成绩管理系统是一套面向学前、小学、初中、高中不同学制不同年...
83 <br>0125 按要求生成指定位数编号 83 <br>0126 确定两字符串是否相等 84 <br>0127 判断两字符串中指定子串是否相等 84 <br>0128 判断字符串是否为日期格式 85 <br>0129 清除字符串中指定...
实例063 使用DateAdd方法向指定日期添加 一段时间间隔 78 实例064 使用TimeSpan对象获取时间间隔 80 实例065 使用Sleep方法延迟时间 81 实例066 如何确定程序的运行时间 82 实例067 使用ParseExact方法将字符串转化...
显示出当前时间及年份,还可以选择年份及月份和日期 Java编写的HTML浏览器 一个目标文件 摘要:Java源码,网络相关,浏览器 Java编写的HTML浏览器源代码,一个很简单甚至不算是浏览器的HTML浏览器,使用方法: ...
如何获取SQL Server服务器端所有数据库列表 164.如何保存图片文件到SQL Server数据库 165.如何将数据库中保存的图片显示到页面中 166.如何在插入记录后获得记录的标识号 167.如何解决ADO.NET访问...
PL/SQL程序的基本单元是语句块,所有的PL/SQL程序都是由语句块构成的,语句块之间可以相互嵌套,每个语句块完成特定的功能。 声明部分:以关键字DECLARE开始,BEGIN结束。主要用于声明变量、常量、数据类型、游标...
日历:使用swing和awt实现一个图形化的日历可以查询星期、日期和年份信息(CalenderTrain.java);标准计算器(Callulator.java);更改组建外观,对日历设置几个显示外观(lookandfeel.java);自定义对话框Dialog...