之前做过一个需求,有一个点是获取指定日期是当前月的第几周,网上查了一些方法,发现其实都是不准确的,要么根本就不是我想要的,要么就是错误的。所以,自己写了一个函数,获取指定日期是当前月的第几周。其实原理很简单,就是判断日是否在自己的范围内,日在(1——7)就是第一周,在(8——14)就是第二周,在(15——21)就是第三周,在(22——28)就是第四周,其他是第五周。方法很简单:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 IF EXISTS ( SELECT 1 2 FROM SYSOBJECTS 3 WHERE ID = OBJECT_ID('fn_GetWeekOfMonth') 4 AND XTYPE = 'FN' ) 5 BEGIN 6 DROP FUNCTION DBO.fn_GetWeekOfMonth 7 END 8 GO 9 --功 能:取指定日期是指定日期所属月的第几周 10 --参 数:@chvDate 指定的日期字符串 11 --返 回 值:@intWeek 返回的周 12 --创 建 人:maojw 13 --创建时间:2013-08-11 14 CREATE FUNCTION DBO.fn_GetWeekOfMonth ( @chvDate VARCHAR(24) ) 15 RETURNS INT 16 AS 17 BEGIN 18 DECLARE @intWeek INT; 19 DECLARE @chvDay VARCHAR(4); 20 21 SET @chvDay = CONVERT(VARCHAR(4), DAY(@chvDate)); 22 23 IF CHARINDEX(@chvDay, '1,2,3,4,5,6,7') > 0 24 BEGIN 25 SET @intWeek = 1 26 END 27 ELSE 28 IF CHARINDEX(@chvDay, '8,9,10,11,12,13,14') > 0 29 BEGIN 30 SET @intWeek = 2 31 END 32 ELSE 33 IF CHARINDEX(@chvDay, '15,16,17,18,19,20,21') > 0 34 BEGIN 35 SET @intWeek = 3 36 END 37 ELSE 38 IF CHARINDEX(@chvDay, '22,23,24,25,26,27,28') > 0 39 BEGIN 40 SET @intWeek = 4 41 END 42 ELSE 43 BEGIN 44 SET @intWeek = 5 45 END 46 47 RETURN @intWeek 48 END 49 GO