Web design and hosting, database, cloud and social media solutions that deliver real business results
  • Servizi database
    • Strumenti
      • Backup del codice SQL
      • Claytabase Server Disk IOPs Calculator
      • Stampante SQL
    • Articoli tecnici
      • Piano di manutenzione di SQL Server 2008
      • Utilizzo dei dati di SQL Server
      • Utilizzo delle date di SQL Server
      • Utilizzo delle funzioni di SQL Server
      • Utilizzo di SQL Server Pivot-Unpivot
  • Sito Web Design
    • Articoli tecnici
      • ASP-NET
      • CSS
    • isola di Wight
    • Sicurezza del sito
  • Servizi per gli affari
    • Microsoft Azure
    • Microsoft Office
  • Circa
    • Portafoglio
    • Squadra
      • Chester Copperpot
CS - češtinaDE - DeutschEN - EnglishES - EspañolFR - FrançaisHI - हिंदीPL - polskiPT - PortuguêsRU - русскийTR - TürkZH - 中国的

Funzione per il ritorno del giorno specifico del mese

SQL Server 2008, Funzione per il ritorno del giorno specifico del mese

Ciò è stato utile per il nostro piano di manutenzione, in quanto possiamo utilizzare uno script e aggiungere codice che verrà eseguito in un giorno specifico (come l'ultima domenica o la prima giornata di festa), l'ho anche usata per prevedere i tempi in cui saranno eseguiti i lavori I nostri server.

La funzione richiede solo tre ingressi, il mese in cui sei interessato, il tipo e il numero.

Utilizza informazioni simili come l'utilizzo di Microsoft per pianificazioni mensili di posti di lavoro.

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

I valori che abbiamo sono simili alla tabella sysschedules ma li elencherò qui;
Per @Type. 1 = domenica, 2 = lunedì, 3 = martedì, 4 = mercoledì, 5 = giovedì, 6 = venerdì, 7 = sabato
Per @Counter, 1 = 1, 2 = 2, 3 = 3, 4 = 4, ecc ..., 32 = Ultimo (questi sono leggermente diversi)
I passi che segue sono i seguenti;
  • Imposta la data di inserimento al primo giorno del mese
  • Dichiarare variabili per il nostro ciclo attraverso il mese
  • Attiva ogni data e aggiorna il conteggio delle partite se c'è una partita e aggiorna una data temporanea per tenere l'ultima partita
  • Se le partite corrispondono al nostro contatore e il contatore è inferiore a 5 (5 = ultimo giorno), quindi impostare la nostra data di ritorno come data temp, quindi uscire dal loop poiché la data non è più nullo.
  • Aggiungete una alla nostra data corrente e effettuate nuovamente il nostro controllo.
  • Restituisci la nostra data, o se null la data temp che era la nostra ultima partita.

Di seguito è riportato un esempio in uso, dove potrebbe essere aggiunto ad esempio i nostri piani di manutenzione . Questo sarà eseguito l'ultima domenica di ogni mese.

SQL

IF CONVERT(DATE,GETDATE())=(SELECT DatabaseUtilities.dbo.FirstDay(GETDATE(),1,32)) BEGIN
--Run your code here...
END
Spero che questo possa essere utile per te, o ti dà un'idea per altri processi.

Author

Gavin Clayton
Gavin Clayton
Ho formato Claytabase nel 2010 come un modo per continuare il mio lavoro con SQL Server e ASP.NET. Ciò è culminato nel sistema di gestione dei contenuti di Ousia che viene preso dal concetto a uno dei CMS più rapidi presenti sul mercato.
 Google Translate
Google Translate

Helpful?

Please note, this commenting system is still in final testing.
RSS Login ContactCookie PolicyMappa del sito
facebook.com/Claytabaseinstagram.com/claytabase/twitter.com/Claytabaselinkedin.com/company/claytabase-ltd
+442392064871info@claytabase.co.ukGround Floor, Building 1000, Lakeside North Harbour, Western Road, Portsmouth, Hampshire, United Kingdom, PO6 3EZ
Partners
Le impostazioni di questo sito sono impostate per consentire tutti i cookie. Questi possono essere modificati sulla nostra pagina politica e le impostazioni dei cookie. Continuando a utilizzare questo sito l'utente accetta l'utilizzo dei cookie.
Ousia Logo
Ousia CMS Loader