计算星期一开始的星期几

时间:2014-02-11 23:59:05

标签: sql-server datetime

我有这个功能可以很好地计算一周中的一周 - 我需要它从星期一开始这一周

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

2 个答案:

答案 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,星期日。