判断给定时间段所在的星期一和星期天的日期_SQL Server_数据库_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 数据库 > SQL Server > 判断给定时间段所在的星期一和星期天的日期

判断给定时间段所在的星期一和星期天的日期

 2013/8/10 2:31:46    程序员俱乐部  我要评论(0)
  • 摘要:最近报表要用到一项功能,需要把数据源根据记录发生日期所在的星期序列进行分组。因此就写了两个相关SQLFunction进行调用。一、给定一个日期值,求出此日期所在星期的星期一和星期天的日期数据例如给定一个日期2010-09-01,求出它所在星期的星期一是2010-08-30,星期天是2010-09-05Function创建如下:USE[MSSQL]GOSETANSI_NULLSONGOSETQUOTED_IDENTIFIERONGOCREATEFUNCTION[dbo]
  • 标签:

最近报表要用到一项功能,需要把数据源根据记录发生日期所在的星期序列进行分组。因此就写了两个相关SQL Function进行调用。

一、给定一个日期值,求出此日期所在星期的星期一和星期天的日期数据

例如给定一个日期 2010-09-01,求出它所在星期的星期一是2010-08-30,星期天是2010-09-05

Function创建如下:

    class="dp-sql">
  1. USE [MSSQL] 
  2. GO 
  3. SET ANSI_NULLS ON 
  4. GO 
  5. SET QUOTED_IDENTIFIER ON 
  6. GO 
  7. CREATE FUNCTION [dbo].[My_OneDay_GetWeekFirstAndEndDay](@tmpDate DATETIME) 
  8. RETURNS  @tmpTable TABLE(FirstDay DATETIME , EndDay DATETIME) 
  9. AS 
  10. BEGIN 
  11.     INSERT INTO @tmpTable 
  12.     SELECT a.FirstDay,b.EndDay FROM (     
  13.         SELECT 1 AS ID,DATEADD(wk, DATEDIFF(wk,0,@tmpDate), 0) AS FirstDAy 
  14.     ) a 
  15.     LEFT JOIN ( 
  16.         SELECT 1 AS ID,DATEADD(wk, DATEDIFF(wk,0,@tmpDate), 6) AS EndDay 
  17.     ) b 
  18.     ON a.ID = b.ID 
  19.     RETURN 
  20. END 

Function测试:

  1. SELECT * from  My_OneDay_GetWeekFirstAndEndDay('2010-09-01'

二、以上面单个日期搜索为基础,由用户输入两个参数,一个是开始日期,一个结束日期,根据这两个参数,求出在此时期段内的所有星期的星期一和星期天的日期表并排序。

例如开始日期是2011-09-01,结束日期是2011-10-06,我们就可以得到此星期表如下:

  1. WeekOrder              FirstDay                                EndDay 
  2.  1               2011-08-29 00:00:00.000  2011-09-04 00:00:00.000 
  3.  2               2011-09-05 00:00:00.000  2011-09-11 00:00:00.000 
  4.  3               2011-09-12 00:00:00.000  2011-09-18 00:00:00.000 
  5.  4               2011-09-19 00:00:00.000  2011-09-25 00:00:00.000 
  6.  5               2011-09-26 00:00:00.000  2011-10-02 00:00:00.000 
  7.  6               2011-10-03 00:00:00.000  2011-10-09 00:00:00.000 

Function创建如下:

  1. USE [MSSQL] 
  2. GO 
  3. SET ANSI_NULLS ON 
  4. GO 
  5. SET QUOTED_IDENTIFIER ON 
  6. GO 
  7. CREATE FUNCTION [dbo].[MY_Range_GetWeekFirstAndEndDays](@tmpDateSTART DATETIME,@tmpDateEND DATETIME) 
  8. RETURNS  @tmpTable TABLE(WeekOrder INT,FirstDay DATETIME , EndDay DATETIME) 
  9. AS 
  10. BEGIN    
  11.  DECLARE   @tmpDate   DATETIME 
  12.  DECLARE   @index         INT 
  13.  SET       @tmpDate=@tmpDateSTART 
  14.  SET       @index=1 
  15.      WHILE     @tmpDate <=@tmpDateEND 
  16.         BEGIN  
  17.              INSERT INTO @tmpTable 
  18.                 SELECT @index,a.FirstDay,b.EndDay FROM (     
  19.                     SELECT 1 AS ID,DATEADD(wk, DATEDIFF(wk,0,@tmpDate), 0) AS FirstDAy) a 
  20.                 LEFT JOIN ( 
  21.                     SELECT 1 AS ID,DATEADD(wk, DATEDIFF(wk,0,@tmpDate), 6) AS EndDay) b 
  22.                 ON a.ID = b.ID 
  23.  
  24.           SET   @tmpDate=DATEADD(DAY,7,@tmpDate) 
  25.           SET   @index=@index+1 
  26.          END  
  27.      RETURN 
  28. END 

Function测试:

  1. SELECT * from  My_Range_GetWeekFirstAndEndDays('2011-09-01','2011-10-06'

原文链接:http://www.cnblogs.com/wsdj-ITtech/archive/2011/10/06/2199736.html

  • 相关文章
发表评论
用户名: 匿名