在Microsoft SQL Server中,我有一个周数
(from DATEPART(wk, datecol))
但我想做的是将其重新转换为该周的日期范围.
例如,
SELECT DATEPART(wk, GETDATE())
收益率10.我想从这个数字得出3/1/2009和3/7/2009.
这可能吗?
Quassnoi的答复工作,但那种让你上了钩清理的日期,如果他们是在中午时间(他一周的开始让你早一天比你需要,如果你在中间使用时间当天 - 您可以使用GETDATE()进行测试.
我过去曾经使用过这样的东西:
SELECT CONVERT(varchar(50), (DATEADD(dd, @@DATEFIRST - DATEPART(dw, DATECOL), DATECOL)), 101), CONVERT(varchar(50), (DATEADD(dd, @@DATEFIRST - DATEPART(dw, DATECOL) - 6, DATECOL)), 101)
这方面的一个附带的好处是,通过使用@@ DATEFIRST你可以处理非标准周开始天(默认是星期天,但SET @@ DATEFIRST你可以改变这一点).
看起来很疯狂,SQL Server中的简单日期操作必须是这个神秘的,但是你去......
您可以将@WeekNum和@YearNum设置为您想要的任何内容 - 在此示例中,它们派生自@datecol变量,出于说明目的,该变量设置为GETDATE().获得这些值后,您可以使用以下方法计算一周的日期范围:
DECLARE @datecol datetime = GETDATE(); DECLARE @WeekNum INT , @YearNum char(4); SELECT @WeekNum = DATEPART(WK, @datecol) , @YearNum = CAST(DATEPART(YY, @datecol) AS CHAR(4)); -- once you have the @WeekNum and @YearNum set, the following calculates the date range. SELECT DATEADD(wk, DATEDIFF(wk, 6, '1/1/' + @YearNum) + (@WeekNum-1), 6) AS StartOfWeek; SELECT DATEADD(wk, DATEDIFF(wk, 5, '1/1/' + @YearNum) + (@WeekNum-1), 5) AS EndOfWeek;