在sql Server自定义一个用户定义星期函数

 更新时间:2012年01月28日 22:39:43   作者:  
程序开发过程中需要做周别统计与显示报表。在做之前,得先找出所在年份周别的开始日期与结束日期。每年每周的开始与结束日期都不尽相同。为了该功能,在sql Server自定义一个用户定义星期函数
文件:.wmv;大小:19,535KB;长度:00:26:39。
下载地址:SqlFunction_udf_Week.rar
以下内容于20120105更新:
2012年刚到,开发的软件使用这个函数发现bug。2012年第一周应该是2012-01-01至2012-01-07,但此函数却把2012-01-08至2012-01-14当作第一周。

就此bug对此函数修改如下:
复制代码 代码如下:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[udf_Week]
(
@StartYear INT,
@EndYear INT
)
RETURNS @Week TABLE([WeekId] INT IDENTITY(1,1) PRIMARY KEY,[Year] [INT] NULL,[Week] [INT] NULL,[StartDate] [DATETIME] NULL,[EndDate] [DATETIME] NULL)
AS
BEGIN
DECLARE @YearStartDate DATETIME
DECLARE @YearEndDate DATETIME
DECLARE @WeekStartDate DATETIME
DECLARE @WeekEndDate DATETIME
DECLARE @Weeks INT

WHILE @StartYear <= @EndYear
BEGIN
SET @YearStartDate = CAST((CAST(@StartYear AS VARCHAR(4)) + '-01-01') AS DATETIME)
SET @YearEndDate= CAST((CAST(@StartYear AS VARCHAR(4))+ '-12-31') AS DATETIME)
SET @Weeks = 1

IF DATEPART(DW,@YearStartDate) > 4
SET @YearStartDate = DATEADD(DAY,(8 - DATEPART(DW,@YearStartDate)) ,@YearStartDate)
ELSE
SET @YearStartDate = DATEADD(DAY,(-(DATEPART(DW,@YearStartDate)-1)),@YearStartDate)

SET @WeekStartDate = @YearStartDate
SET @WeekEndDate = DATEADD(DAY,6,@WeekStartDate)
WHILE DATEDIFF(DAY,@WeekStartDate,@YearEndDate) >= 4
BEGIN
INSERT INTO @Week([Year],[Week],[StartDate],[EndDate]) VALUES (@StartYear,@Weeks,@WeekStartDate,@WeekEndDate)
SET @Weeks = @Weeks + 1
SET @WeekStartDate = @WeekStartDate + 7
SET @WeekEndDate = @WeekEndDate + 7
END
SET @StartYear = @StartYear + 1
END
RETURN
END

相关文章

  • sqlserver自动增长列引起的问题解决方法

    sqlserver自动增长列引起的问题解决方法

    仅当使用了列列表并且 IDENTITY_INSERT 为 ON 时,才能为表'*'中的标识列指定显式值。
    2011-10-10
  • SQLMAP插件tamper模块简介

    SQLMAP插件tamper模块简介

    这篇文章主要介绍了SQLMAP插件tamper模块介绍,在SQLMAP中,有很多tamper插件,常用的tamper插件及其作用本文给大家介绍的非常详细,需要的朋友可以参考下
    2022-08-08
  • sqlserver添加sa用户和密码的实现

    sqlserver添加sa用户和密码的实现

    这篇文章主要介绍了sqlserver添加sa用户和密码的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • Microsoft SQLServer的版本区别及选择

    Microsoft SQLServer的版本区别及选择

    Microsoft SQLServer的版本区别及选择...
    2007-02-02
  • ASP和SQL Server如何构建网页防火墙

    ASP和SQL Server如何构建网页防火墙

    本文介绍的是利用ASP和SQL Server构建网页防火墙,介绍建立的过程,主要分三步给大家介绍的。希望对你有帮助,一起来看。
    2015-10-10
  • ODBC连接数据库以SQLserver为例图文详解

    ODBC连接数据库以SQLserver为例图文详解

    开放数据库互连(ODBC)是微软提出的数据库访问接口标准,开放数据库互连定义了访问数据库的API一个规范,这些API独立于不同厂商的DBMS,也独立于具体的编程语言,下面这篇文章主要给大家介绍了关于ODBC连接数据库以SQLserver为例的相关资料,需要的朋友可以参考下
    2023-05-05
  • SQL Server创建数据库图文教程

    SQL Server创建数据库图文教程

    这篇文章主要介绍了SQL Server创建数据库图文教程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • SQL Server中搜索特定的对象

    SQL Server中搜索特定的对象

    这篇文章介绍了SQL Server搜索特定对象的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • sql server Bulk Insert命令详细

    sql server Bulk Insert命令详细

    这篇文章主要介绍了sql server Bulk Insert命令详细 ,需要的朋友可以参考下
    2015-08-08
  • bak文件怎么打开 2000w数据怎么打开?

    bak文件怎么打开 2000w数据怎么打开?

    这篇文章主要介绍了sqlserver数据库bak文件如何恢复打开的方法,需要的朋友可以参考下
    2014-02-02

最新评论