sqlserver-在DATETIME给定的一周内获取特定的工作日



我需要通过一个DateTimeDayOfWeek,然后我需要获得所选周的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

有什么想法吗?

对于日期时间值,您必须非常小心!尤其是一天的指数很棘手。你应该始终考虑特定文化的差异:

--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)

相关内容

  • 没有找到相关文章

最新更新