Web design and hosting, database, cloud and social media solutions that deliver business results
  • Бизнес решения
    • Веб-дизайн сайта
      • Безопасность веб-сайта
      • Остров Уайт
    • Бизнес-услуги
      • Microsoft Azure
    • Microsoft Office
    • Социальные медиа
  • Службы баз данных
    • Отчеты
      • Claytabase Server Disk IOPs Calculator
      • SQL-принтер
      • Восстановление кода SQL
    • Проверка телефонного номера в правильном формате Великобритании с SQL Server 2008
  • О нас
    • команда
      • Chester Copperpot
      • Гэвин Клейтон
    • Портфолио
  • Академия
    • Базы данных обучения
      • SQL-Server
      • В SQL Server 2008 план обслуживания
      • Использование SQL Server Pivot-Unpivot
      • Использование дат SQL Server
      • Использование функций SQL Server
    • Изучение веб-дизайна
      • ASP-NET
      • CSS
č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, функция возврата определенного дня месяца

Это было полезно для нашего плана обслуживания, поскольку мы можем использовать один скрипт и добавить код, который будет работать в определенный день (например, в последнее воскресенье или 1-й рабочий день), я также использовал его для прогнозирования времени, в течение которого Джобс будет работать на Наших серверов.

Функция требует только три входа, месяц, в котором вы заинтересованы, тип и номер.

Он использует аналогичную информацию, используемую 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 = 1, 2 = 2-й, 3 = 3-й, 4 = 4-й и т. Д., 32 = последний (они немного отличаются)
Последующие шаги заключаются в следующем:
  • Установите дату ввода в первый день месяца
  • Объявлять переменные для нашего цикла через месяц
  • Перебирайте каждую дату и обновляйте счетчик совпадений, если есть совпадение, и обновляйте временную дату, чтобы провести последний матч
  • Если совпадения совпадают с нашим счетчиком, а счетчик меньше 5 (5 = последний день), тогда установите дату возврата в качестве временной даты, это приведет к выходу из цикла, поскольку дата больше не равна нулю.
  • Добавьте одно к нашей текущей дате и повторите нашу проверку.
  • Верните нашу дату, или если нулевая дата temp, которая была нашим последним матчем.

Ниже приведен пример его использования, где он может быть добавлен, например, к нашим планам технического обслуживания . Это будет работать в последнее воскресенье каждого месяца.

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