请假设(我在意大利)所有的星期都以 . 开头Monday
和结尾Sunday
。
我想编写一个标量值函数来确定number of the week
参考GETDATE()
预先感谢您的友好合作。
请注意这一点:SELECT 必须与 SET DATEFIRST 命令无关!!
请假设(我在意大利)所有的星期都以 . 开头Monday
和结尾Sunday
。
我想编写一个标量值函数来确定number of the week
参考GETDATE()
预先感谢您的友好合作。
请注意这一点:SELECT 必须与 SET DATEFIRST 命令无关!!
可以用两个内胆吗?
SET DATEFIRST 1;
SELECT DATEPART( WEEK , GETDATE())
今天
SELECT DATEPART( WEEK , GETDATE())
返回 30 而
SET DATEFIRST 1;
SELECT DATEPART( WEEK , GETDATE())
返回 31
Edit Untested but based on This Question您可以使用以下 select 语句获得相当于 SQL Server 2008 datepart(iso_week, getdate())
(我相信这是您想要的)
SELECT ISOWeek = (DATEPART(DY, Th) - 1) / 7 + 1
FROM (SELECT Th = DATEADD(D, 3 - (DATEPART(DW, getdate()) + @@DATEFIRST - 2) % 7, getdate())) s
这是一个小片段,应该可以满足您的需要。
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
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
select datepart(week,getdate())
更多在http://msdn.microsoft.com/en-us/library/aa258265(v=sql.80).aspx
declare @oldDF int
set @oldDF = @@DATEFIRST
set DATEFIRST 1
select DATEPART(WEEK, GETDATE())
set DATEFIRST @oldDF