gpt4 book ai didi

sql-server - 在 MS SQL Server 2005 中获取日期的周数?

转载 作者:行者123 更新时间:2023-12-02 08:04:49 25 4
gpt4 key购买 nike

是否可以创建一个选择周数(而不是一周中的某一天 - 或一周中的天数)的 SQL 语句。我正在创建一个 View 来选择此额外信息以及其他几个字段,因此无法使用存储过程。我知道可以创建一个 UDF 来实现这一目的,但如果可能的话,我宁愿只向该数据库添加一个 View ,而不是同时添加一个 View 和一个函数。

有什么想法吗?在我的家乡,一周从星期一开始,第一周是一年中的第一周,至少有 4 天。

相关:

How do I calculate the week number given a date?

最佳答案

请注意,根据文化不同,正确的周数也存在差异。周数取决于几个因国家/地区而异的假设,请参阅 Wikipedia article on the matter 。有一个ISO standard (ISO 8601)适用于周数。

SQL Server 集成的 DATEPART() 函数不一定会做正确的事情。 SQL Server 假设第 1 周的第 1 天是 1 月 1 日,对于许多应用程序来说这是错误的。

正确计算周数并非易事,可以在网络上找到不同的实现。例如,有一个 UDF 计算 ISO week numbers from 1930-2030 ,是众多其他人中的一员。您必须检查什么对您有用。

这个来自Books Online (虽然您可能想使用 the one from Jonas Lincoln's answer ,但 BOL 版本似乎不正确):

CREATE FUNCTION ISOweek  (@DATE DATETIME)
RETURNS INT
AS
BEGIN
DECLARE @ISOweek INT
SET @ISOweek = DATEPART(wk,@DATE)
+1
-DATEPART(wk,CAST(DATEPART(yy,@DATE) AS CHAR(4))+'0104')
-- Special cases: Jan 1-3 may belong to the previous year
IF (@ISOweek=0)
SET @ISOweek = dbo.ISOweek(CAST(DATEPART(yy,@DATE) - 1
AS CHAR(4))+'12'+ CAST(24+DATEPART(DAY,@DATE) AS CHAR(2)))+1
-- Special case: Dec 29-31 may belong to the next year
IF ((DATEPART(mm,@DATE)=12) AND
((DATEPART(dd,@DATE)-DATEPART(dw,@DATE))>= 28))
SET @ISOweek=1
RETURN(@ISOweek)
END
GO

关于sql-server - 在 MS SQL Server 2005 中获取日期的周数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/348880/

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