Transact-SQL | SQL Server | Comment à obtenir les Fins Semaine pour un mois


Transact-SQL ne possède pas de fonction de la date à la liste des terminaisons semaine pendant un mois. Cependant Transact-SQL pour SQL Server ne dispose pas des fonctionnalités telles que ilDateAdd oDatePart, qui peut être utilisé pour calculer la semaine de terminaisons pour un mois.

Le script suivant calcule la semaine se terminant pour un mois donné. Si le jour actuel de la semaine une valeur finale se situe dans un mois, il sera exclu de cette valeur. Même le script conserve une seule instance de chaque semaine de sorte que la liste définitive de la sortie maximale est toujours de quatre articles.

Ce script fonctionne bien dans la table de fonctions, mais peut également être utilisé dans une procédure stockée. L'exemple suivant utilise une fonction multi-déclaration de valeur table. Vous pouvez créer ces par l'article programmabilité des fonctions SQL Server.

Le script Transact-SQL pour extraire la liste de la semaine Fins utilise deux variables d'entrée pour calculer la dernière semaine. Ces variables sont le mois et l'année du calendrier.

Liste des variables


Voici les variables qui seront utilisées pour déterminer la semaine terminaisons pour un mois donné. Pour ce script, il est supposé semaine se terminant tombe un samedi. Cette valeur peut être modifiée à la directive DATEFIRST@@qui peut être réglé sur un certain nombre de jours (1-7) pour correspondre à la journée de la semaine devrait commencer (le dimanche est le jour 1).




calMonth Cette valeur est un nombre entre 1 - 12. E 'le mois que vous voulez la fin de la semaine. E 'dans un char (2) le type de données, car nous avons besoin de construire un données par les parties plus tard. calYear Cette valeur est un nombre, qui est stocké en tant que char (4) pour l'année dans laquelle vous voulez extraire la semaine terminaisons pour un mois donné. Ce est un char peut construire une date ultérieure. lastDayMonth Ce est un entier et est le dernier jour du mois, qui devrait être (28,29,30,31) en fonction du mois et si ce est une année bissextile ou non. Cette valeur est calculée en utilisant la fonction personnalisée GetLastDayOfMonth. Vous pouvez trouver des instructions complètes et le code dans ce tutoriel. dayNumber Cette variable sera utilisée pour faire défiler le nombre de jours dans un mois jusqu'à raggiungimentolastDayMonth. weekend Ce est le dernier jour de la semaine, par défaut, il est un samedi. Vous pouvez changer cela en définissant la directive@@DATEFIRST. CalendarDate Ce est la valeur de date qui sera utilisée pour déterminer la semaine terminaisons. isExist Ce est une valeur booléenne de sorte qu'une seule instance de chaque dernière semaine est maintenue. weekEndngTable Ce est une variable de table pour conserver provisoirement des informations semaines fin.

Transact-SQL-TABLE Multi Function-Code

CREATE FUNCTION [dbo]. [WeekEndingsforMonth] ( calMonth char (2), calYear char (4) ) RETOUR TABELLAweekEndingTable ( Date de LastDayOfWeek ) AS COMMENCER dichiararelastDayMonth int, int compteur, date de fin de semaine, datacalendarDate, isExist int / * @ Default isExist fausse sorte que la valeur sera ajouté à tabellaweekEndngTable * / setisExist = 0 / ** / setdayNumber = 1 --CE Variables de défaut sur le premier jour du mois SetCalendarDate = CONVERT (DATETIME, calmonth + '/ 1 /' + @ calyear) --get Le dernier jour du mois. Nous utilisons les valeurs qui commencent et se terminent pour définir les paramètres de boucle. setlastDayMonth = DATEPART (dd, dbo.GetLastDayOfMonth (CalendarDate)) / * Boucle à travers chaque jour du mois, en calculant la semaine se terminant le * / mentredayNumber détails du Code


  • Commencez par définir la table des fonctions qui fournira un code standard qui est modifié dans les étapes suivantes.
  • Définir des variables d'entrée ilcalMonth ecalYear. Devrait être omble 02h04 respectivement. Voir le code ci-dessous.
  • L'instruction RETURN est fourni par le modèle, mais vous pouvez spécifier un rendement variable nom de la table. Pour cet exercice, le chiameròweekEndingTable. Cette table de variables renvoie le résultat sous la forme d'une table, afin de l'utiliser comme ne importe quelle autre table comprenant unit
  • L'étape suivante consiste à définir les variables internes qui seront utilisées pour maintenir les éléments de données lors de la compilation de la liste de la fin de la semaine. Leurs définitions sont liste dans la section Variables ci-dessus.
  • Le fonctionnement est réglé variabileisExist à 0 pour indiquer que la table ne contient pas la valeur la semaine se terminant. Cette variable est égale à 1 si la valeur se trouve déjà dans la dernière semaine tabellaweekEndngTable.
  • Aussi, vous devez définir ildayNumber 1. Ce est la variable compteur.
  • La variable suivante pour régler lacalendarDate. Lorsque le script est initialement chargé, cette variable est définie au premier jour du mois en utilisant les trois parties d'une date: calmonth, calyear et le jour est toujours une puisque ce est le premier jour du mois. La valeur concaténée est converti en une valeur datetime utilisant cette formule: CONVERT (DATETIME, calmonth + '/ 1 /' + @ calyear).
  • Nous devrons également le dernier jour du mois qui sera réglée en utilisant la variabilelastDayMonth. Cette valeur est calculée en utilisant la DATEPART Transact-SQL pour extraire le nombre de jours de la date. Ce calcul a été effectué selon GetLastDayOfMonth. Le tutoriel GetLastDayOfMonth explique comment créer cette fonction complètement.
  • La partie principale de la boucle de code n nombre de fois en fonction du nombre de jours pour un nombre. Certains diront qu'il serait plus efficace d'augmenter ildayNumber contre variables du cycle 7 et seulement 4 fois. Cette approche nécessiterait plus de logique pour voir si tout dernière date du cycle est un autre mois et revenir. Donc, je me trouve moins d'erreurs cycle de sujets pour chaque jour du mois. Puisque le code de cycle dans la plupart des 31 fois, il n'y a pas la performance de retard. Alors que le valoredayNumber est moins variabilelastDayMonth, le cycle continuera.
  • La première étape du cycle consiste à mettre à jour la variabilecalendarDate pour correspondre au jour du mois qui est attribué à variabiledayNumber.
  • Le variabileweekEnd est assigné la date de fin semaine (par défaut, samedi), qui est basé sur la formule suivante: sélectionnez DATEADD (DD, 7 - datepart (DW, CalendarDate), @ CalendarDate). La fonction DATEPART T-SQL est la partie intérieure de la formule. Le DATEPART renvoie le nombre de jours de la semaine pour une valeur de date donnée en utilisant le DW. La valeur de la donnée est fourni par valorecalendarDate.
  • La partie extérieure de l'équation est réalisée par la fonction DATEADD T-SQL. Cette fonction retourne une nouvelle date en ajoutant ou en soustrayant le nombre de jours à partir d'une valeur de date. Donc, pour nos fins, nous soustrayons la valeur de la semaine Jour (à l'intérieur) de 7 (le nombre total de jours dans une semaine) pour déterminer quels jours de rendement fondé sur la valeur de ingressocalendarDate.
  • La déclaration suivante vérifie valoreweekEnd est déjà présente dans la variable tabellaweekEndingTable et affecte le nombre de coups variabileisExist. En théorie, cette variable doit contenir seulement 0 ou 1
  • Si la valeur ne est pas èweekEnd nelweekEndingTable, dans d'autres paroleisExists = 0 et la valeur du mois variabileweekEnd égaux variabilecalMonth (mois de requête) et entrez la valeur dans le tableau variable en utilisant les déclarations "INSERT INTOweekEndngTable SELEZIONAweekEnd".
  • Une fois l'opération d'insertion est terminée, vous augmenterez ildayNumber de 1 et la fonction de retour serez appelé une fois que le compteur a atteint la limite ou le dernier jour du mois.

Test de mise en œuvre de la table WeekEndingsforMonth Fonction et la sortie


L'utilisation d'un Multi-déclaration table de ping-valeur est la même chose avec une autre table et vous pouvez améliorer considérablement les performances de requête si la table d'origine a trop de dossiers ou, comme dans notre cas, nous besoin d'une table temporaire à notre liste de la semaine terminaisons.

Vous pouvez utiliser ilweekEndngTable comme suit:

* Choisir daweekEndngTable (mois, année)

Pour le démontrer, le mois et l'année pour remplacer les mots de valeurs réelles ou variables T-SQL se appliquer, tels que:

* Choisir daweekEndngTable (4, 2012)

Voici la sortie

(0)
(0)

Commentaires - 0

Sans commentaires

Ajouter un commentaire

smile smile smile smile smile smile smile smile
smile smile smile smile smile smile smile smile
smile smile smile smile smile smile smile smile
smile smile smile smile
Caractères restants: 3000
captcha