小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

判斷給定時(shí)間段所在的星期一和星期天的日期

 mybook564 2014-04-12

最近報(bào)表要用到一項(xiàng)功能,需要把數(shù)據(jù)源根據(jù)記錄發(fā)生日期所在的星期序列進(jìn)行分組。因此就寫了兩個(gè)相關(guān)SQL Function進(jìn)行調(diào)用。

一、給定一個(gè)日期值,求出此日期所在星期的星期一和星期天的日期數(shù)據(jù)

例如給定一個(gè)日期 2010-09-01,求出它所在星期的星期一是2010-08-30,星期天是2010-09-05

Function創(chuàng)建如下:

  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'

二、以上面單個(gè)日期搜索為基礎(chǔ),由用戶輸入兩個(gè)參數(shù),一個(gè)是開始日期,一個(gè)結(jié)束日期,根據(jù)這兩個(gè)參數(shù),求出在此時(shí)期段內(nèi)的所有星期的星期一和星期天的日期表并排序。

例如開始日期是2011-09-01,結(jié)束日期是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創(chuàng)建如下:

  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

【編輯推薦】

  1. 常見數(shù)據(jù)庫的分頁實(shí)現(xiàn)方案
  2. Oracle分頁小談
  3. 談?wù)凧ava調(diào)用SQL Server分頁存儲(chǔ)過程
  4. 淺述asp.net海量分頁數(shù)據(jù)存儲(chǔ)過程
  5. 證明DataReader分頁的可行性
【責(zé)任編輯:艾婧 TEL:(010)68476606】

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多