当前位置:  开发笔记 > 数据库 > 正文

从T-SQL中的周数中获取日期

如何解决《从T-SQL中的周数中获取日期》经验,为你挑选了2个好方法。

在Microsoft SQL Server中,我有一个周数

(from DATEPART(wk, datecol)) 

但我想做的是将其重新转换为该周的日期范围.

例如,

SELECT DATEPART(wk, GETDATE())

收益率10.我想从这个数字得出3/1/2009和3/7/2009.

这可能吗?



1> mwigdahl..:

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中的简单日期操作必须是这个神秘的,但是你去......


NB.如果您按照声称更改周开始日,这确实*不起作用.默认的开始工作日是7(星期日),此代码计算假设当前日总是<= 7.如果您将起始工作日设置为1(星期一),此代码会出现负数并最终显示您错误的日期之前.

2> 小智..:

您可以将@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;

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有