获取指定日期是当前月的第几周

之前做过一个需求,有一个点是获取指定日期是当前月的第几周,网上查了一些方法,发现其实都是不准确的,要么根本就不是我想要的,要么就是错误的。所以,自己写了一个函数,获取指定日期是当前月的第几周。其实原理很简单,就是判断日是否在自己的范围内,日在(1——7)就是第一周,在(8——14)就是第二周,在(15——21)就是第三周,在(22——28)就是第四周,其他是第五周。方法很简单:

 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
View Code
原文地址:https://www.cnblogs.com/mjw1124/p/3279146.html