Web design and hosting, database, cloud and social media solutions that deliver business results
  • Des solutions d'affaires
    • Automatisation des processus robotiques
    • Logiciel
    • Services de base
      • Intégration de données
      • Power BI
      • Services d'entrepôt de données
      • Tools
    • Conception de site Web
      • Localisation et traduction Web
      • Sécurité du site Web
    • Services Cloud
      • Microsoft Azure
    • Média Social
    • Microsoft Office
  • Académie
    • Conception de bases de données d'apprentissage
      • Utilisation de données SQL Server
      • Obtenir la requête ouverte
      • Plan de maintenance SQL Server 2008
      • Utilisation des dates SQL Server
      • Utilisation de SQL Server Pivot-Unpivot
      • Utiliser SQL Server Fonctions
    • Apprentissage de la conception Web
      • CSS
      • ASP NET
    • Cloud d'apprentissage et services informatiques
      • Demande SSL et génération de fichier PFX dans OpenSSL étapes simples
  • Sur
    • Carrières
    • Équipe
      • Ali Al Amine
      • Chester Copperpot
      • Gavin Clayton
      • Suneel Kumar
    • Portefeuille
č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)

Fonction de retour du jour spécifique du mois

SQL Server 2008, fonction pour retourner le jour du mois spécifique

Cela a été utile pour notre plan de maintenance, car nous pouvons utiliser un script et ajouter un code qui fonctionnera un jour précis (comme le dernier dimanche ou le 1er jour de la semaine), je l'ai également utilisé pour prévoir les heures d'exécution de Jobs Nos serveurs.

La fonction ne nécessite que trois entrées, le Mois qui vous intéresse, le type et le numéro.

Il utilise des informations similaires à celles de Microsoft pour les horaires de travail mensuels.

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

Les valeurs que nous avons sont similaires à la table des syssatures, mais je les énumérerai ici;
Pour @Type. 1 = dimanche 2 = lundi 3 = mardi 4 = mercredi 5 = jeudi 6 = vendredi 7 = samedi
Pour @Counter, 1 = 1er, 2 = 2ème, 3 = 3ème, 4 = 4ème etc ..., 32 = Dernier (ceux-ci sont légèrement différents)
Les étapes suivantes sont les suivantes;
  • Réglez la date d'entrée au premier jour du mois
  • Déclarez les variables pour notre boucle au cours du mois
  • Faites une boucle dans chaque date et mettez à jour le nombre de matchs s'il y a une correspondance et mettez à jour une date temporaire pour tenir la dernière correspondance
  • Si les correspondances sont égales à notre compteur et que le compteur est inférieur à 5 (5 = dernier jour), définissez notre date de retour en tant que date temporaire, cela va alors quitter la boucle car la date n'est plus nulle.
  • Ajoutez un à notre date actuelle et effectuez notre vérification à nouveau.
  • Retournez notre date, ou si null la date de la temp qui était notre dernière correspondance.

Voici un exemple de l'utilisation, où il pourrait être ajouté à l'exemple de nos plans de maintenance . Cela se déroulera le dernier dimanche de chaque mois.

SQL

IF CONVERT(DATE,GETDATE())=(SELECT DatabaseUtilities.dbo.FirstDay(GETDATE(),1,32)) BEGIN
--Run your code here...
END
J'espère que cela peut vous être utile, ou cela vous donne une idée pour d'autres processus.

Author

Helpful?

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

Registered in England and Wales 08985867

RSSLoginLink Politique de cookieSitemap

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
Les paramètres de ce site sont configurés pour autoriser tous les cookies. Ceux-ci peuvent être modifiés sur notre page cookies. En continuant à utiliser ce site, vous acceptez l'utilisation de cookies.
Ousia Logo
Logout
Ousia CMS Loader