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

来源:asp之家 时间:2012-02-12 15:47:28 

文件:.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

标签:星期函数,sql,server
0
投稿

猜你喜欢

  • 费明红:什么样的404页面才是正确的?

    2009-05-21 17:47:00
  • ASP函数过滤数组重复数据代码

    2010-01-02 20:36:00
  • 形式追随内容?

    2010-03-07 15:55:00
  • 交互设计师心得——核心竞争力

    2010-01-19 13:45:00
  • MySQL两种表存储结构性能比较测试过程

    2007-12-09 12:45:00
  • 优化次数过多的循环

    2009-11-12 12:35:00
  • 随机6+1选号码摇奖程序

    2008-07-18 13:15:00
  • mysql5存储过程编写实践

    2008-12-24 16:32:00
  • DW自带的行为制作弹出菜单

    2008-05-16 11:38:00
  • FLASH 全屏播放

    2008-07-19 11:36:00
  • 如何使用FSO修改文件夹的名称

    2008-10-11 14:24:00
  • asp如何取回已忘记的密码?

    2010-05-13 16:33:00
  • css清除浮动“clear:both;”的应用

    2008-03-17 12:54:00
  • 鼠标驱动图片变化

    2009-07-26 10:03:00
  • 教你在SQL Server 2000数据库中使用分区

    2008-11-25 11:55:00
  • 图片预加载效果的实现

    2008-06-16 12:08:00
  • 纯CSS圆角框2-透明圆角化背景图片

    2009-12-11 19:10:00
  • SQL SERVER 日志已满的处理方法

    2010-07-31 13:32:00
  • 网页设计之步骤和大局观

    2008-03-18 12:50:00
  • 解决SQL Server日志文件损坏严重的问题

    2009-02-05 15:55:00
  • asp之家 网络编程 m.aspxhome.com