Database
 sql >> Base de données >  >> RDS >> Database

Utilisation des fonctions DATEADD, DATEDIFF et DATEPART T-SQL en termes simples

Cet article se concentre sur le développement d'une compréhension de base de l'utilisation de l'une des fonctions de date Transact-SQL les plus courantes :DATEADD, DATEDIFF et DATEPART.

Dans cet article, j'ai également souligné l'importance d'utiliser correctement ces fonctions de date dans les manipulations de date quotidiennes, suivies de scénarios intéressants dans lesquels ces fonctions de date peuvent être utilisées de manière collaborative pour résoudre des calculs de date légèrement complexes.

Étant donné que ces fonctions sont principalement utilisées dans les manipulations de date, essayons d'abord de comprendre ce que nous entendons par manipulation de date.

Comprendre la manipulation des dates

Les valeurs date-heure doivent souvent être modifiées selon les besoins, et la méthode de modification, de gestion ou de contrôle des calculs date-heure est connue sous le nom de manipulation de date.

Nous nous référons également à cette situation (manipulation de date) lorsqu'une valeur de date est lue à partir d'une base de données, puis modifiée avant d'être à nouveau stockée.

Scénario de commande client

Un exemple intéressant de manipulation de date est une commande client scénario, lorsqu'une commande placé par un client est traité, la date de livraison doit être défini 5 jours avant la date de commande , cela signifie donc qu'un développeur doit utiliser la ou les fonctions de date T-SQL pour manipuler (modifier) ​​la date de commande pour calculer la date de livraison .

Exemple de rapport sur les ventes quotidiennes

Un exemple légèrement complexe est lorsqu'un utilisateur professionnel exécute un rapport quotidien sur les ventes s'il affiche les résultats d'hier.

Par exemple, si nous exécutons le Rapport quotidien sur les ventes le dimanche à 11h00, il nous montrera les résultats basés sur le samedi, et si nous l'exécutons le samedi à 17h00, il nous montrera tous les résultats le vendredi, car la journée en cours n'est pas encore terminée et la plus récente journée complète disponible est hier. C'est ainsi que la plupart des rapports quotidiens professionnels, y compris les rapports financiers, sont conçus pour fonctionner.

Dans cet exemple, la date actuelle est manipulé (modifié) pour obtenir la date précédente, qui contient les enregistrements de ventes pour une journée complète.

Mise en œuvre des exemples

Veuillez garder à l'esprit les exemples ci-dessus, car nous allons implémenter ces scénarios une fois que nous aurons bien compris l'utilisation de certaines des fonctions de date les plus courantes décrites dans cet article.

Comprendre les fonctions de date

Examinons d'abord certaines fonctions de date de base qui peuvent nous aider à répondre aux exigences de manipulation de date, telles que la détermination des jours entre deux dates (date de commande et date de livraison), l'obtention des enregistrements de ventes de la semaine dernière en fonction de la date actuelle ou le calcul de la date d'expiration prévue en fonction du date de production et ainsi de suite.

Puisqu'il n'y a pas de règles strictes et rapides, nous commençons d'abord par explorer la fonction DATEPART.

Utilisation de la fonction DATEPART

Définition simple

La fonction DATEPART est utilisée pour renvoyer une partie d'une date donnée dans une valeur numérique.

La partie peut être le jour de la date, le mois de la date, l'année de la date, etc.

Par exemple, nous pouvons utiliser la fonction DATEPART pour obtenir le jour d'une date donnée afin de déterminer si une commande a été passée le dimanche ou non.

Un autre exemple consiste à faire passer le mois d'une date donnée à une autre fonction de date pour un traitement ultérieur.

Définition Microsoft

Cette fonction renvoie un entier représentant la partie de date spécifiée de la date spécifiée .

Compatibilité

Selon la documentation Microsoft, cette fonction est compatible avec les versions suivantes de SQL Server :

  1. SQL Server 2008 plus
  2. Base de données SQL Azure
  3. Entrepôt de données SQL Azure
  4. Entrepôt de données parallèle

Syntaxe

DATEPART (partie de date , date)

Exemple 1 :Obtenir une partie de l'année de la date

Définissons également une certaine date (OrderDate ) pour obtenir la partie souhaitée (jour, mois, année) à l'aide de la fonction DATEPART.

Pour obtenir l'Année de la date de commande, nous passons simplement ANNEE suivi de Date de commande (@OrderDate) dans le DATEPART fonctionnent comme suit :

-- Définir la date de commandeDECLARE @OrderDate DATETIME2='2017-01-11'-- Obtenir l'année de la date de commandeSELECT DATEPART(YEAR,@OrderDate) as Year_OrderDate

Exemple 2 :Obtenir la partie du mois

Si nous sommes intéressés à connaître le mois de la date, alors Mois doit être passé dans le DATEPART fonctionnent comme suit :

-- Définir la date de commandeDECLARE @OrderDate DATETIME2='2017-01-11'-- Obtenir le mois de la date de commandeSELECT DATEPART(MONTH,@OrderDate) as Month_OrderDate

Exemple 3 : Obtenir une partie de la journée

Pour trouver la partie Jour de la date, passez simplement JOUR dans le DATEPART fonctionnent comme suit :

-- Définir la date de la commandeDECLARE @OrderDate DATETIME2='2017-01-11'-- Obtenir le jour de la date de la commandeSELECT DATEPART(DAY,@OrderDate) as Day_OrderDate

Exemple 4 : Obtenir une partie du jour de la semaine

Pour obtenir la partie jour de la semaine de la date, passez simplement WEEKDAY dans le DATEPART fonctionnent comme suit :

-- Définir la date de commandeDECLARE @OrderDate DATETIME2='2017-01-11'-- Obtenir le jour de la semaine de la date de commandeSELECT DATEPART(WEEKDAY,@OrderDate) comme WeekDay_OrderDate

Nous obtenons 4, qui est mercredi à partir de dimanche, qui est 1.

De même, nous pouvons également obtenir un quart, une heure, une minute, une deuxième partie de la date.

Passons à la prochaine fonction de date.

Utilisation de la fonction DATEADD

Définition simple

La fonction DATEADD permet d'ajouter ou de soustraire une date.

Par exemple, nous pouvons savoir quelle sera la date après quatre jours ou quatre jours avant.

Ceci est très pratique dans les scénarios où la date prévue doit être calculée en fonction d'une date donnée, comme la date d'expiration de l'adhésion doit être exactement un an à compter de la date d'enregistrement.

Un autre exemple consiste à calculer la date de fin du cours qui doit être exactement deux mois après la date de début du cours.

Définition Microsoft

Cette fonction ajoute un nombre spécifié valeur (sous la forme d'un entier signé) à une partie de date spécifiée d'une date d'entrée valeur, puis renvoie cette valeur modifiée.

Compatibilité

Selon la documentation Microsoft, cette fonction est compatible avec les versions suivantes de SQL Server :

  1. SQL Server 2008 plus
  2. Base de données SQL Azure
  3. Entrepôt de données SQL Azure
  4. Entrepôt de données parallèle

Syntaxe

DATEADD (partie de date, nombre, date)

La partie de date est une partie de la date telle que le jour, le mois, l'année, le jour de la semaine, l'heure, etc.

Le nombre est alors le numéro de la partie de date (jour, mois, année, etc.) à ajouter ou à soustraire

La date est une date donnée qui doit être ajoutée ou soustraite à l'aide de la fonction DATEADD

Exemple 1 :Obtenir la date de l'année suivante

Définissons également une certaine date (Date d'inscription) qui va être ajoutée ou soustraite à l'aide du DATEADD fonction en fonction des besoins.

La date de l'année suivante peut être obtenue en ajoutant 1 à la partie de date Année.

Pour obtenir l'année suivante à partir de la date d'enregistrement, nous ajoutons simplement DatePart Année suivi de 1 suivi de Date d'inscription (@RegistrationDate) dans le DATEADD fonctionnent comme suit :

-- Définir la date d'inscriptionDECLARE @RegDate DATETIME2='2018-07-10'-- Obtenir l'année prochaine à partir de la date d'inscriptionSELECT DATEADD(YEAR,1,@RegDate) as NextYear_RegDate

Exemple 2 :Obtenir la date du mois suivant

Pour obtenir la date du mois suivant, passez le MOIS partie de date à DATEADD suivi du nombre de mois que nous voulons ajouter suivi de la date donnée qui est la date d'enregistrement (RegDate) dans notre cas.

-- Définir la date d'enregistrementDECLARE @RegDate DATETIME2='2018-07-10'SELECT @RegDate AS RegDate -- Afficher la date d'enregistrement-- Obtenir le MOIS suivant à partir de la date d'inscriptionSELECT DATEADD(MONTH,1,@RegDate) as NextMonth_RegDate 

Exemple 3 :Obtenir la date du jour suivant

Si le cours commence le jour (suivant) suivant de l'inscription, nous devons passer le JOUR avec 1 car le jour suivant ajoute un autre jour à la date d'enregistrement, ce qui se traduit comme suit :

-- Définir la date d'inscriptionDECLARE @RegDate DATETIME2='2018-07-10'SELECT @RegDate AS RegDate -- Afficher la date d'inscription-- Obtenir le JOUR suivant à partir de la date d'inscriptionSELECT DATEADD(DAY,1,@RegDate) as NextDAY_RegDate 

Exemple 4 :Configuration de la date du rapport des ventes quotidiennes

Concentrons-nous maintenant sur un scénario un peu complexe souvent utilisé dans l'élaboration des rapports financiers quotidiens.

Si nous voulons créer un rapport de ventes quotidien, il doit afficher les données d'hier, car la journée en cours n'est pas encore complète et la journée complète la plus récente est celle d'hier, comme indiqué au début de cet article.

En fin de compte, nous devons également convertir la date et l'heure d'hier en valeur de date uniquement pour permettre au rapport de couvrir plus facilement toute la journée.

Pour obtenir la date d'hier en fonction de la date d'aujourd'hui, nous devons ajouter "-1 jour" à la date actuelle comme suit :

-- Définir la date actuelleDECLARE @CurrentDate DATETIME2=GETDATE()SELECT @CurrentDate AS CurrentDate -- Afficher la date d'enregistrement-- Obtenir la date et l'heure d'hier à partir de la date actuelleSELECT DATEADD(DAY,-1,@CurrentDate) as YesterdayDateTime_CurrentDate-- Conversion Hier DateHeure dans Date uniquementSELECT CAST(DATEADD(DAY,-1,@CurrentDate) AS DATE)as YesterdayDateOnly_CurrentDate

Utilisation de la fonction DATEDIFF

Définition simple

La fonction DATEDIFF est utilisée pour déterminer la différence en jours, mois, années, heures etc. entre deux dates.

Par exemple, nous pouvons savoir combien de jours se sont écoulés entre deux dates.

Ceci est également très pratique dans les scénarios où nous devons rechercher la différence entre la date de livraison prévue de la commande et la date de livraison réelle de la commande.

Un autre exemple est le suivi du temps, ce qui signifie comprendre combien d'heures ont été consacrées à un projet particulier depuis qu'il a commencé jusqu'à maintenant.

Définition Microsoft

Cette fonction renvoie le nombre (sous forme de valeur entière signée) des limites de partie de date spécifiées franchies entre la date de début spécifiée et date de fin .

Compatibilité

Selon la documentation Microsoft, cette fonction est compatible avec les versions suivantes de SQL Server :

  1. SQL Server 2008 plus
  2. Base de données SQL Azure
  3. Entrepôt de données SQL Azure
  4. Entrepôt de données parallèle

Syntaxe

DATEDIFF ( partie de date , date de début , date de fin ) 

La partie de date est une partie de la date telle que le jour, le mois, l'année, le jour de la semaine, l'heure, etc.

Exemple 1 :Comprendre la différence en jours

Essayons de comprendre comment le DATEDIFF la fonction fonctionne.

Si nous essayons de connaître la différence en jours entre le 01 juillet 2018 et le 02 juillet 2018, nous obtiendrons 1 jour, ce qui signifie qu'il soustrait la date de fin de la date de début pour obtenir la différence :

SELECT DATEDIFF(DAY,'01 JULY 2018','02 JULY 2018') AS Days_Between_Two_Consecutive_DatesSELECT DATEDIFF(DAY,'01 JULY 2018','03 JULY 2018') AS Days_Between_01_July_03_July

Exemple 2 :Obtenir des jours entre la commande et la livraison

Définissons deux dates différentes, Date de commande et Date de livraison, qui servira à déterminer la différence en jours, mois, années, heures etc.

Pour connaître le nombre de jours entre la date de commande et la date de livraison, la partie de date DAY est passée dans le DATEDIFF fonction suivie de Date de début (OrderDate) et Date de fin (DeliveryDate) :

-- Définir la date de commande et la date de livraison de la commandeDECLARE @OrderDate DATETIME2='28 juillet 2018'DECLARE @DeliveryDate DATETIME2='07 août 2018'SELECT @OrderDate AS OrderDate,@DeliveryDate as DeliveryDate-- Afficher les dates de commande et de livraison-- Obtenir la différence en jours entre la date de commande et la date de livraisonSELECT DATEDIFF(DAY,@OrderDate,@DeliveryDate) as Days_Between_Order_and_Delivery

Exemple 3 :Obtenir des heures de projet (suivi du temps)

Ceci est un exemple intéressant de suivi du temps à l'aide de la fonction DATEDIFF.

Par exemple, nous sommes intéressés de savoir combien de jours et de jours en heures et de jours en minutes nous avons passés sur un projet particulier, puis nous allons d'abord passer la partie date JOUR dans la fonction DATEDIFF, où la date de début est le date à laquelle le projet a commencé et la date de fin est la date d'aujourd'hui suivie de HOUR puis de MINUTE comme suit :

-- Définir la date de début du projetDECLARE @ProjectStartDate DATETIME2='10 novembre 2018'SELECT @ProjectStartDate AS ProjectStartDate-- Afficher la date de début du projet-- Obtenir le nombre de jours passés sur le projet jusqu'à présentSELECT DATEDIFF(DAY,@ProjectStartDate,GETDATE( )) as Project_Days_So_Far-- Obtenir le nombre d'heures passées sur le projet jusqu'à présentSELECT DATEDIFF(HOUR,@ProjectStartDate,GETDATE()) as Project_Hours_So_Far-- Obtenir le nombre de minutes passées sur le projet jusqu'à présentSELECT DATEDIFF(MINUTE,@ProjectStartDate,GETDATE( )) comme Project_Minutes_So_Far

Félicitations, vous avez appris à utiliser les fonctions DATEADD, DATEDIFF et DATEPART T-SQL.

Choses à faire

Maintenant que vous êtes familiarisé avec certaines fonctions de date de base, lancez-vous un défi en essayant les choses mentionnées ci-dessous :

  1. Veuillez vous référer à mon article précédent Procédures de rapport de test unitaire - Aller au démarrage de TDDD Partie-4 pour configurer un exemple de base de données SQLDevBlogReportTDD, puis créer une vue pour connaître le nombre de mois en fonction de la date d'enregistrement de l'auteur.
  2. Veuillez vous référer à mon article précédent Simplifier la procédure stockée principale des tests unitaires qui appelle également une procédure utilitaire pour créer un exemple de base de données SQLBookShop et ajouter la DeliveryDate colonne au BookOrder table, puis créez une nouvelle procédure stockée ProcessOrder qui utilise le DATEADD fonction pour ajouter la livraison prévue cinq jours après la date de commande.
  3. Veuillez consulter mon article précédent Jump to Start Test-Driven Database Development (TDDD) - Part 3 et essayez de créer un rapport quotidien à l'aide de la fonction DATEADD T-SQL en modifiant les données dans l'exemple de base de données SQLDevBlogReportTDD afin que il y a suffisamment de données à afficher dans le rapport.