Nay*_*ung 26 t-sql sql-server-2008
在microsoft sql server的SQL语句中,有一个内置函数来获取周数,但它是一年中的一周.
Select DatePart(week, '2012/11/30') // **returns 48**
Run Code Online (Sandbox Code Playgroud)
返回值48是一年中的周数.
而不是48,我想获得1,2,3或4(本月的周数).我认为本月的周数可以通过本周月数的模块来实现.例如
Select DATEPART(week, '2012/11/30')%MONTH('2012/11/30')
Run Code Online (Sandbox Code Playgroud)
但我想知道是否有其他内置函数来获取MS SQL SERVER中本月的WeekNumber.
t-c*_*.dk 48
这里有两种不同的方式,两种方式都假设周一开始
如果你想要整周,那么他们属于他们开始的那个月:所以星期六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
Run Code Online (Sandbox Code Playgroud)
如果您的周变为月变化,那么星期六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
Run Code Online (Sandbox Code Playgroud)
小智 11
DECLARE @DATE DATETIME
SET @DATE = '2013-08-04'
SELECT DATEPART(WEEK, @DATE) -
DATEPART(WEEK, DATEADD(MM, DATEDIFF(MM,0,@DATE), 0))+ 1 AS WEEK_OF_MONTH
Run Code Online (Sandbox Code Playgroud)
没有内置功能。这取决于您所说的每个月的一周是什么意思。您可能指的是前 7 天(第 1 周)、后 7 天(第 2 周)等。在这种情况下,它只是
(DATEPART(day,@Date)-1)/7 + 1
如果您想使用与 DATEPART(week,) 相同的周编号,您可以使用该月第一天的周编号与相关日期之间的差值 (+1):
(DATEPART(week,@Date)- DATEPART(week,DATEADD(m, DATEDIFF(m, 0, @Date), 0))) + 1
或者,您可能需要其他内容,具体取决于周数的含义。
只需查看日期,看看它落在什么范围内。
范围 1-7 是第一周,范围 8-14 是第二周,以此类推。
SELECT
CASE WHEN DATEPART(day,yourdate) < 8 THEN '1'
ELSE CASE WHEN DATEPART(day,yourdate) < 15 then '2'
ELSE CASE WHEN DATEPART(day,yourdate) < 22 then '3'
ELSE CASE WHEN DATEPART(day,yourdate) < 29 then '4'
ELSE '5'
END
END
END
END
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
171173 次 |
| 最近记录: |