SELECT CONVERT(VARCHAR(10),MIN(DAT),120) AS DATESTART, CONVERT(VARCHAR(10),MAX(DAT),120) AS DATEEND
FROM (
SELECT DATEADD(DAY, ID-1, CONVERT(VARCHAR(8),GETDATE(),120)+'01') AS DAT
FROM (SELECT ID=(SELECT COUNT(*) FROM SYSOBJECTS WHERE ID<=O.ID) FROM SYSOBJECTS O) T
WHERE DAY(DATEADD(DAY, -1, DATEADD(MONTH, 1, CONVERT(VARCHAR(8),GETDATE(),120)+'01')))>=ID
) T
GROUP BY DATEPART(WK,DAT)
/*
DATESTART DATEEND
---------- ----------
2009-04-01 2009-04-04
2009-04-05 2009-04-11
2009-04-12 2009-04-18
2009-04-19 2009-04-25
2009-04-26 2009-04-30
*/
FROM (
SELECT DATEADD(DAY, ID-1, CONVERT(VARCHAR(8),GETDATE(),120)+'01') AS DAT
FROM (SELECT ID=(SELECT COUNT(*) FROM SYSOBJECTS WHERE ID<=O.ID) FROM SYSOBJECTS O) T
WHERE DAY(DATEADD(DAY, -1, DATEADD(MONTH, 1, CONVERT(VARCHAR(8),GETDATE(),120)+'01')))>=ID
) T
GROUP BY DATEPART(WK,DAT)
/*
DATESTART DATEEND
---------- ----------
2009-04-01 2009-04-04
2009-04-05 2009-04-11
2009-04-12 2009-04-18
2009-04-19 2009-04-25
2009-04-26 2009-04-30
*/
from(select dt=dateadd(wk,datediff(wk,0,dateadd(m,datediff(m,0,getdate()),0)),0)) t
/*
w1b w1e w2b w2e w3b w3e w4b w4e w5b w5e
----------------------- ----------------------- ----------------------- ----------------------- ----------------------- ----------------------- ----------------------- ----------------------- ----------------------- -----------------------
2009-03-30 00:00:00.000 2009-04-05 00:00:00.000 2009-04-06 00:00:00.000 2009-04-12 00:00:00.000 2009-04-13 00:00:00.000 2009-04-19 00:00:00.000 2009-04-20 00:00:00.000 2009-04-26 00:00:00.000 2009-04-27 00:00:00.000 2009-05-03 00:00:00.000(1 行受影响)
*/