请假设(我在意大利),所有周都以Monday
开头,以Sunday
结束。
我想编写一个标量值函数来确定number of the week
并引用GETDATE()
提前感谢您的合作。
请注意这一点:SELECT必须是SET DATEFIRST命令中的INDIPENDENT !!
答案 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)
select datepart(week,getdate())
更多http://msdn.microsoft.com/en-us/library/aa258265(v=sql.80).aspx
答案 3 :(得分:0)
declare @oldDF int
set @oldDF = @@DATEFIRST
set DATEFIRST 1
select DATEPART(WEEK, GETDATE())
set DATEFIRST @oldDF