我有这个功能可以很好地计算一周中的一周 - 我需要它从星期一开始这一周
CREATE FUNCTION dbo.ufs_FirstofMonth (@theDate DATETIME)
RETURNS DATETIME
AS
BEGIN
RETURN ( DATEADD(d, (DAY(@theDate)-1) * (-1) ,@theDate ) )
END
GO
CREATE FUNCTION dbo.ufs_FirstSunday (@theDate DATETIME)
RETURNS DATETIME
AS
BEGIN
RETURN ( DATEADD(d, CASE WHEN DATEPART ( dw , dbo.ufs_FirstofMonth(@theDate)) = 1 THEN 0
ELSE 8-DATEPART ( dw , dbo.ufs_FirstofMonth(@theDate))
END
, dbo.ufs_FirstofMonth(@theDate)) )
END
GO
CREATE FUNCTION dbo.ufs_WeekOfMonth (@theDate DATETIME)
RETURNS INTEGER
AS
BEGIN
RETURN (CASE WHEN DATEPART ( dw , @theDate) > DAY(@theDate)
THEN 1 + DATEDIFF(wk, dbo.ufs_FirstSunday(DATEADD(mm,-1,@theDate)) , @theDate)
ELSE 1 + DATEDIFF(wk, dbo.ufs_FirstSunday(@theDate) , @theDate)
END
)
END
答案 0 :(得分:3)
这里有两种不同的方式,两种方式都假设星期一开始一周
如果你想要整周,那么他们属于他们开始的月份:所以星期六2012-09-01和星期日2012-09-02是第4周和星期一2012-09-03是第1周使用这样:
declare @date datetime = '2012-09-01'
select datepart(day, datediff(day, 0, @date)/7 * 7)/7 + 1
如果您的周变为月变化,那么2012-09-01星期六和星期日2012-09-02是第1周,星期一2012-09-03是第2周使用此:
declare @date datetime = '2012-09-01'
select datediff(week, dateadd(week, datediff(week, 0, dateadd(month, datediff(month, 0, @date), 0)), 0), @date - 1) + 1
答案 1 :(得分:0)
将以下内容添加为函数的第一行:
SET DATEFIRST 1 -- Set Monday as the first day of the week
参考。 SET DATEFIRST (Transact-SQL) - 将一周的第一天设置为1到7之间的数字。美国英语默认值为7,星期日。