我需要通过一个DateTime
,DayOfWeek
然后从中获得DateTime
所选的那一周。
--Sunday-1
--Monday-2
--Tuesday-3
--Wednesday-4
--Thursday-5
--Friday-6
--Saturday-7
DECLARE @DayOfWeek TINYINT = 1
DECLARE @Date DATETIME = '2016-07-21 23:47:11.133'
SELECT DATEADD(wk, DATEDIFF(wk,0,@Date), @DayOfWeek)
例如:
对于这一点,我需要得到像日期2016-07-24 00:00:00
是Sunday
在那一周。
有任何想法吗?
使用datetime值时,您必须非常小心!尤其是一天的索引很棘手。您应该始终考虑到特定于文化的差异:
--The first of January was a Friday in 2016
DECLARE @testDate DATE = {d'2016-01-01'};
-我尝试德国文化,这从星期一开始
SET LANGUAGE GERMAN;
SELECT @@DATEFIRST,DATEPART(WEEKDAY,@testDate); --in Germany the Friday was 5th day
-从周日开始,现在与英国文化相同
SET LANGUAGE ENGLISH;
SELECT @@DATEFIRST,DATEPART(WEEKDAY,@testDate); --in English culture this is the 6th day
-您可以通过在Modulo 7中添加这些值来使这种文化独立
SET LANGUAGE GERMAN;
SELECT (@@DATEFIRST + DATEPART(WEEKDAY,@testDate)) % 7; --in Germany the Friday was 5th day
SET LANGUAGE ENGLISH;
SELECT (@@DATEFIRST + DATEPART(WEEKDAY,@testDate)) % 7; --in English culture this is the 6th day
现在,两个查询在星期五返回相同的值6
。
您的示例将星期日表示为一周的第一天,因此,实际上,到给定日期的一周中的星期日应该是7月17日。您的预期产量(7月24日)是下周的第一天,不是吗?
试试这个:
DECLARE @DayOfWeek TINYINT = 1;
DECLARE @Date DATETIME = '2016-07-21 23:47:11.133';
SELECT CAST(@Date + @DayOfWeek - (@@DATEFIRST + DATEPART(WEEKDAY,@Date)) % 7 AS DATE)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句