Web design and hosting, database, cloud and social media solutions that deliver business results
  • Solução de negócio
    • Automação Robótica de Processos
    • Programas
    • Serviços de banco de dados
      • Relatórios
      • Integração de dados
    • Design de Websites
      • Design de logotipo
      • Gateways de pagamento
      • Localização e Tradução Web
      • Otimização de sites
      • Segurança do site
      • Ferramentas Técnicas
    • Serviços Empresariais
      • Amazon Web Services
      • Serviços do Google Cloud
      • Microsoft Azure
    • Microsoft Office
    • Mídia Social
  • Sobre
    • Carreiras
      • Tradutor Inglês-Espanhol
      • Tradutor Inglês-Turco
      • Tradutor Inglês-Japonês
      • Tradutor Inglês-Português
    • Equipe
      • Adrian Anandan
      • Ali Al Amine
      • Ayse Hur
      • Chester Copperpot
      • Gavin Clayton
      • Sai Gangu
      • Suneel Kumar
      • Surya Mukkamala
    • Portfolio
č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)

Função para retornar o Dia específico do mês

SQL Server 2008, função para retornar o dia específico do mês

Isso foi útil para o nosso plano de manutenção, pois podemos usar um script e adicionar um código que será executado em um dia específico (como o último domingo ou 1º dia da semana), eu também usei para prever as horas em que o Jobs será executado Nossos servidores.

A função requer apenas três entradas, o Mês em que você está interessado, o tipo e o número.

Ele usa informações semelhantes à Microsoft para horários de trabalho mensais.

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

Os valores que temos são semelhantes à tabela de sysschedules, mas os listarei aqui;
Para @Type. 1 = domingo, 2 = segunda-feira, 3 = terça-feira, 4 = quarta-feira, 5 = quinta-feira, 6 = sexta-feira, 7 = sábado
Para @Counter, 1 = 1º, 2 = 2º, 3 = 3º, 4 = 4º etc ..., 32 = Último (estes são ligeiramente diferentes)
Os passos a seguir são os seguintes;
  • Defina a data de entrada para o primeiro dia do mês
  • Declare variáveis ​​para o nosso ciclo ao longo do mês
  • Faça um loop por cada data e atualize a contagem de correspondência se houver uma correspondência e atualize uma data temporária para manter a última partida
  • Se as correspondências equivalem ao nosso contador, e o contador é inferior a 5 (5 = último dia), defina a data de retorno como a data da temporização, então irá sair do loop, já que a data não é mais nula.
  • Adicione um a nossa data atual e execute nossa seleção novamente.
  • Retorna nossa data, ou se nula a data da temp que foi a nossa última partida.

Abaixo está um exemplo disso em uso, onde pode ser adicionado para exemplo nossos planos de manutenção . Isso será executado no último domingo de cada mês.

SQL

IF CONVERT(DATE,GETDATE())=(SELECT DatabaseUtilities.dbo.FirstDay(GETDATE(),1,32)) BEGIN
--Run your code here...
END
Espero que isso possa ser útil para você, ou isso lhe dá uma idéia para outros processos.

Author

Helpful?

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

Registered in England and Wales 08985867

RSSLoginLink Política de CookiesSitemap

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
As configurações neste site são definidas para permitir todos os cookies. Estes podem ser alterados em nossa página de configurações e políticas de cookie. Ao continuar a usar este site, você concorda com o uso de cookies.
Ousia Logo
Logout
Ousia CMS Loader