gpt4 book ai didi

sql-server - 需要一些 DateDiff 计算从星期一开始的一周

转载 作者:行者123 更新时间:2023-12-02 09:13:16 24 4
gpt4 key购买 nike

我有以下 T-SQL。我试图用它来计算一周开始的日期。我需要我的一周从星期一开始:

SET DATEFIRST 1 -- Monday (First Week day)

DECLARE @dt DATETIME2

SELECT DATEADD(week, (-1) * (datepart(dw, @dt) - 1), @dt) AS datetime2--(7)

DECLARE @SchDT Datetime
DECLARE @TstPeriod varchar(20)
SET @TstPeriod = 'Week'

IF @TstPeriod = 'Month'
SET @SchDT = cast(DATEADD(Month, DATEDIFF(month,0,GETDATE()),-1) as datetime2(7))

IF @TstPeriod = 'Week'
SET @SchDT = cast(DATEADD(week, DATEDIFF(week,0,GETDATE()),-1) as datetime2(7))

SELECT @SchDT

只有在这之后,我才意识到 SQL Server 将一周的开始视为星期日 - 不管怎样。

有没有人遇到过类似的需求,可以分享如何让 SQL Server 计算 datediff() 使用星期一作为一周的开始?

非常感谢

最佳答案

您不应该对整个批处理使用 SET DATEFIRST(或 SET LANGUAGE)。这可能会产生各种意想不到的副作用。

@@DATEFIRST,将一周的第一天反射(reflect)为INT值。使用它来独立地计算您的值(value)。

--可以查看差异

SET LANGUAGE GERMAN;
SELECT @@DATEFIRST;
SET LANGUAGE ENGLISH;
SELECT @@DATEFIRST;

--我设置了一个变量

DECLARE @d DATETIME=GETDATE();

--像另一个答案中的建议这样的简单计算将根据系统文化返回不同的日期

SET LANGUAGE GERMAN;
SELECT DATEADD(DAY,-DATEPART(WEEKDAY,@d)+2,@d);
SET LANGUAGE ENGLISH;
SELECT DATEADD(DAY,-DATEPART(WEEKDAY,@d)+2,@d);

--但是使用@@DATEFIRST你可以在你的计算中得到一个校正项

SET LANGUAGE GERMAN;
SELECT DATEADD(DAY,-((DATEPART(WEEKDAY,@d) + @@DATEFIRST + 5) % 7),@d);
SET LANGUAGE ENGLISH;
SELECT DATEADD(DAY,-((DATEPART(WEEKDAY,@d) + @@DATEFIRST + 5) % 7),@d);

关于sql-server - 需要一些 DateDiff 计算从星期一开始的一周,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49762231/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com