×î½ü±¨±íÒªÓõ½Ò»ÏÄÜ£¬ÐèÒª°ÑÊý¾ÝÔ´¸ù¾Ý¼Ç¼·¢ÉúÈÕÆÚËùÔÚµÄÐÇÆÚÐòÁнøÐзÖ×é¡£Òò´Ë¾ÍдÁËÁ½¸öÏà¹ØSQL Function½øÐе÷Óá£
Ò»¡¢¸ø¶¨Ò»¸öÈÕÆÚÖµ£¬Çó³ö´ËÈÕÆÚËùÔÚÐÇÆÚµÄÐÇÆÚÒ»ºÍÐÇÆÚÌìµÄÈÕÆÚÊý¾Ý
ÀýÈç¸ø¶¨Ò»¸öÈÕÆÚ2010-09-01£¬Çó³öËüËùÔÚÐÇÆÚµÄÐÇÆÚÒ»ÊÇ2010-08-30£¬ÐÇÆÚÌìÊÇ2010-09-05
Function´´½¨ÈçÏÂ:
USE [MSSQL]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].[My_OneDay_GetWeekFirstAndEndDay](@tmpDate DATETIME)
RETURNS @tmpTable TABLE(FirstDay DATETIME , EndDay DATETIME)
AS
BEGIN
INSERT INTO @tmpTable
SELECT a.FirstDay,b.EndDay FROM (
SELECT 1 AS ID,DATEADD(wk, DATEDIFF(wk,0,@tmpDate), 0) AS FirstDAy
) a
LEFT JOIN (
SELECT 1 AS ID,DATEADD(wk, DATEDIFF(wk,0,@tmpDate), 6) AS EndDay
) b
ON a.ID = b.ID
RETURN
END
Function²âÊÔ:
SELECT * from My_OneDay_GetWeekFirstAndEndDay('2010-09-01')
¶þ¡¢ÒÔÉÏÃæµ¥¸öÈÕÆÚËÑË÷Ϊ»ù´¡£¬ÓÉÓû§ÊäÈëÁ½¸ö²ÎÊý£¬Ò»¸öÊÇ¿ªÊ¼ÈÕÆÚ£¬Ò»¸ö½áÊøÈÕÆÚ£¬¸ù¾ÝÕâÁ½¸ö²ÎÊý£¬Çó³öÔÚ´ËʱÆÚ¶ÎÄÚµÄËùÓÐÐÇÆÚµÄÐÇÆÚÒ»ºÍÐÇÆÚÌìµÄÈÕÆÚ±í²¢ÅÅÐò¡£
ÀýÈ翪ʼÈÕÆÚÊÇ2011-09-01,½áÊøÈÕÆÚÊÇ2011-10-06£¬ÎÒÃǾͿÉÒԵõ½´ËÐÇÆÚ±íÈçÏÂ:
WeekOrder FirstDay EndDay
1 2011-08-29 00:00:00.000 2011-09-04 00:00:00.000
2 2011-09-05 00:00:00.000 2011-09-11 00:00:00.000
3 2011-09-12 00:00:00.000 2011-09-18 00:00:00.000
4 2011-09-19 00:00:00.000 2011-09-25 00:00:00.000
5 2011-09-26 00:00:00.000 2011-10-02 00:00:00.000
6 2011-10-03 00:00:00.000 2011-10-09 00:00:00.000
Function´´½¨ÈçÏÂ:
USE [MSSQL]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].[MY_Range_GetWeekFirstAndEndDays](@tmpDateSTART DATETIME,@tmpDateEND DATETIME)
RETURNS @tmpTable TABLE(WeekOrder INT,FirstDay DATETIME , EndDay DATETIME)
AS
BEGIN
DECLARE @tmpDate DATETIME
DECLARE @index INT
SET @tmpDate=@tmpDateSTART
SET @index=1
WHILE @tmpDate <=@tmpDateEND
BEGIN
INSERT INTO @tmpTable
SELECT @index,a.FirstDay,b.EndDay FROM (
SELECT 1 AS ID,DATEADD(wk, DATEDIFF(wk,0,@tmpDate), 0) AS FirstDAy) a
LEFT JOIN (
SELECT 1 AS ID,DATEADD(wk, DATEDIFF(wk,0,@tmpDate), 6) AS EndDay) b
ON a.ID = b.ID
SET @tmpDate=DATEADD(DAY,7,@tmpDate)
SET @index=@index+1
END
RETURN
END
Function²âÊÔ:
SELECT * from My_Range_GetWeekFirstAndEndDays('2011-09-01','2011-10-06')