首页 > 解决方案 > 这个 SQL 函数有什么作用?

问题描述

我不确定我是否做对了。请有人向我解释。我不知道应该在 shis 函数中添加什么细节。我猜熟悉 sql 的 somwone 会很容易知道这一点

     declare @date      datetime = '2016-05-01',
            @ndays     INT = 11,
            @country     NVARCHAR(2)
    
    BEGIN         
            
           IF @date IS NULL
             BEGIN       
               SET @date = GETDATE();                                                   
             END
            IF @country IS NULL
             BEGIN       
               SET @country = 'HU';                                                     
             END
    
           DECLARE @count      INT  = 1                                                 
           DECLARE @newdate    datetime                                                 
           DECLARE @firstdayofmonth date = DATEADD(month, DATEDIFF(month, 0, @date), 0) 
    
    
            
           
           WHILE DATEPART(weekday,@firstdayofmonth) in (7,1)                                                                                        
            BEGIN 
              SET @firstdayofmonth = DATEADD(DAY, 1, @firstdayofmonth)                  
            END;
    
           SET @newdate = @firstdayofmonth                                              
    
           WHILE @count < @ndays                                                        
            BEGIN 
    
            SET @newdate = DATEADD(DAY, 1, @newdate)                                    
    
            IF (DATEPART(WEEKDAY, @newdate) not in (1,7))                               
                SET @count += 1;                                                        
            END  
    
            select @newdate                                                             
      END 

我知道这是关于宣布日期。每月的第一天计算令人困惑。

标签: sql-server

解决方案


这显然不是 mysql 代码工作日从 0 到 6。您也不能那样声明变量。

此外,您应该已经发布了整个代码。

至于你的代码

第一个 While 子句搜索一个月中的第一个星期一。

第二个计算所选月份的所有工作日(周一至周五)。

使用第一个变量,您可以操纵哪个月份,但那个国家与它有什么关系,我只能猜测您有一份所有公共假期毛皮匈牙利的清单。


推荐阅读