(sql server 2005)如何从GETDATE()开始确定WEEK号

时间:2012-07-27 16:16:40

标签: sql sql-server sql-server-2005

  

可能重复:
  Getting week number off a date in MS SQL Server 2005?

请假设(我在意大利),所有周都以Monday开头,以Sunday结束。

我想编写一个标量值函数来确定number of the week并引用GETDATE()

提前感谢您的合作。

请注意这一点:SELECT必须是SET DATEFIRST命令中的INDIPENDENT !!

4 个答案:

答案 0 :(得分:3)

你能用这两个班轮吗?

  SET DATEFIRST 1;
  SELECT DATEPART( WEEK , GETDATE())

今天

SELECT DATEPART( WEEK , GETDATE())

返回30而

SET DATEFIRST 1;
SELECT DATEPART( WEEK , GETDATE()) 

返回31

编辑未经测试但基于This Question您可以使用以下select语句获得与SQL Server 2008相同的datepart(iso_week, getdate())(我相信您想要的) / p>

SELECT ISOWeek = (DATEPART(DY, Th) - 1) / 7 + 1
FROM (SELECT Th = DATEADD(D, 3 - (DATEPART(DW, getdate()) + @@DATEFIRST - 2) % 7, getdate())) s

答案 1 :(得分:1)

这是一个应该做你需要的小片段。

DECLARE @firstOfYear DATETIME
SET @firstOfYear = STR(Year(GETDATE()), 4)+'-01-01 00:00:00'
SELECT DATEDIFF(ww, @firstOfYear - ((DATEPART(dw, @firstOfYear) + 5) % 7), GETDATE())

请注意,如果您想在不同的一天将周开始设置为,请将+5更改为基于7 - dw的值。这适用于MSSQL。

这可以通过获取一年中的第一天并在当天或之前找到开始周的那一天来实现。然后我们得到传入任何日期和“第一”周开始之间的周数。如果您想允许传入任何日期,只需用您的参数替换所有GETDATE次来电,您应该好好去。如果您需要一个select语句:

SELECT 
    DATEDIFF(ww, day1 - ((DATEPART(dw, day1) +5) % 7), GETDATE()) 
FROM 
    (SELECT CAST(STR(Year(GETDATE()), 4)+'-01-01 00:00:00' AS DATETIME) day1) d

答案 2 :(得分:0)

答案 3 :(得分:0)

declare @oldDF int
set @oldDF = @@DATEFIRST

set DATEFIRST 1
select DATEPART(WEEK, GETDATE())

set DATEFIRST @oldDF