Web design and hosting, database, cloud and social media solutions that deliver business results
  • 商务解决方案
  • 数据库咨询服务
    • 报告
      • Claytabase Server Disk IOPs Calculator
      • SQL代码备份
      • SQL打印机
    • 技术文章
      • SQL-Server
      • SQL Server 2008的维护计划
      • 使用SQL Server函数
      • 使用SQL Server日期
      • 使用SQL Server透视-取消透视
  • 网站设计
    • 怀特岛
    • 技术文章
      • ASP-NET
      • CSS
    • 网站安全
  • 产品展示
  • 社交媒体
  • 关于我们
    • 投资组合
    • 球队
      • 切斯特Copperpot
  • 学院
čeština (CS)Deutsch (DE)English (EN-GB)English (EN-US)Español (ES)Français (FR)हिंदी (HI)italiano (IT)日本語 (JA)polski (PL)Português (PT)русский (RU)Türk (TR)中国的 (ZH)

返回特定日期的功能

SQL Server 2008,返回特定日期的功能

这对于我们的维护计划非常有用,因为我们可以使用一个脚本并添加在特定日期(如上周日或第一个工作日)运行的代码,我也用它来预测Jobs运行的时间我们的服务器。

该功能只需要三个输入,您感兴趣的月份,类型和数量。

它使用与Microsoft在每月工作时间表中使用的类似信息。

SQL

ALTER FUNCTION FirstDay(@Month DATETIME,@Type INT, @Counter INT) RETURNS DATETIME

AS BEGIN

SET @Month = CONVERT(DATE,DATEADD(DAY,1-DATEPART(DAY,@Month),@Month))

DECLARE @CurDate DATETIME=@Month,@Date DATETIME,@Matches INT=0,@TempDate DATETIME


WHILE @CurDate<DATEADD(MONTH,1,@Month) AND @Date IS NULL BEGIN

     

      IF (SELECT (CASE @Type WHEN 1 THEN (CASE WHEN DATEPART(WeekDay,@CurDate)=1 THEN 1 ELSE 0 END)

      WHEN 2 THEN(CASE WHEN DATEPART(WeekDay,@CurDate)=2 THEN 1 ELSE 0 END)

      WHEN 3 THEN(CASE WHEN DATEPART(WeekDay,@CurDate)=3 THEN 1 ELSE 0 END)

      WHEN 4 THEN(CASE WHEN DATEPART(WeekDay,@CurDate)=4 THEN 1 ELSE 0 END)

      WHEN 5 THEN(CASE WHEN DATEPART(WeekDay,@CurDate)=5 THEN 1 ELSE 0 END)

      WHEN 6 THEN(CASE WHEN DATEPART(WeekDay,@CurDate)=6 THEN 1 ELSE 0 END)

      WHEN 7 THEN(CASE WHEN DATEPART(WeekDay,@CurDate)=7 THEN 1 ELSE 0 END)

      WHEN 8 THEN(CASE WHEN DATEPART(WeekDay,@CurDate) IN (1,2,3,4,5,6,7) THEN 1 ELSE 0 END)

      WHEN 9 THEN(CASE WHEN DATEPART(WeekDay,@CurDate) IN (2,3,4,5,6) THEN 1 ELSE 0 END)

      WHEN 10 THEN (CASEWHEN DATEPART(WeekDay,@CurDate) IN (1,7) THEN 1 ELSE 0 END)

      ELSE 0 END))=1 BEGIN

            SET @Matches = @Matches+1

            SET @TempDate = @CurDate

      END

     

      IF @Matches=@Counter AND @Counter<32 BEGIN

      SET @Date=@TempDate

      END

      SET @CurDate=DATEADD(DAY,1,@CurDate)

     

END

 

RETURN ISNULL(@Date,@TempDate)

END

GO

我们的值类似于sysschedules表,但我将在这里列出它们;
对于@Type。 1 =星期日,2 =星期一,3 =星期二,4 =星期五,5 =星期六,6 =星期五,7 =星期六
对于@Counter,1 = 1st,2 = 2nd,3 = 3rd,4 = 4th等...,32 = Last(这些略有不同)
其步骤如下:
  • 将输入日期设置为月份的第一天
  • 声明本月的循环变量
  • 循环遍历每个日期,如果有匹配则更新匹配计数,并更新暂存日期以保存最后一个匹配项
  • 如果匹配等于我们的计数器,并且计数器小于5(5 =最后一天),则将我们的返回日期设置为临时日期,然后将退出循环,因为日期不再为空。
  • 将一个添加到我们当前的日期,然后再次执行检查。
  • 返回我们的日期,或者如果是我们最后一次匹配的临时日期。

以下是使用中的一个示例,可以将其添加到我们的维护计划中 。这将在每个月的最后一个星期日运行。

SQL

IF CONVERT(DATE,GETDATE())=(SELECT DatabaseUtilities.dbo.FirstDay(GETDATE(),1,32)) BEGIN
--Run your code here...
END
我希望这可以对你有用,或者给你一个其他过程的想法。

Author

Helpful?

Please note, this commenting system is still in final testing.
Copyright Claytabase Ltd 2020

Registered in England and Wales 08985867

RSSLoginLink Cookie政策网站地图

Social Media

facebook.com/Claytabaseinstagram.com/claytabase/twitter.com/Claytabaselinkedin.com/company/claytabase-ltd

Get in Touch

+442392064871info@claytabase.comClaytabase Ltd, Unit 3d, Rink Road Industrial Estate, PO33 2LT, United Kingdom
此网站上的设置设置为允许所有Cookie。 这些可以在我们的Cookie政策和设置页面上更改。继续使用本网站即表示您同意使用Cookie。
Ousia Logo
Logout
Ousia CMS Loader