Maison  >  Article  >  base de données  >  Comment utiliser la fonction dateiff en SQL ? (explication détaillée du code)

Comment utiliser la fonction dateiff en SQL ? (explication détaillée du code)

藏色散人
藏色散人original
2019-03-26 13:46:0533989parcourir

Dans SQL Server, vous pouvez utiliser la fonction T-SQL DATEDIFF() pour renvoyer la différence entre deux dates. Il fonctionne avec n'importe quelle expression qui peut être analysée en une valeur d'heure, de date, de smalldatetime, de datetime, de datetime2 ou de datetimeoffset. Par conséquent, vous pouvez également obtenir la différence entre les deux heures.

Comment utiliser la fonction dateiff en SQL ? (explication détaillée du code)

Cet article fournit des exemples d'utilisation de la fonction DATEDIFF() dans SQL Server.

La syntaxe de la fonction DATEDIFF() est la suivante :

DATEDIFF ( datepart , startdate , enddate )

où datepart est la partie de la date que vous souhaitez comparer. startdate est la première date et enddate est la date de fin.

La façon dont cela fonctionne consiste à soustraire la date de début de la date de fin.

Exemple 1

Voici un exemple basique où l'on peut calculer le nombre de jours entre deux dates :

SELECT DATEDIFF(day, '2001-01-01', '2002-01-01') AS Result;

Résultat :

+----------+
| Result   |
|----------|
| 365      |
+----------+

Exemple 2

Vous trouverez ci-dessous un autre exemple où j'ai déclaré deux variables et leur ai attribué deux dates différentes (j'ai utilisé DATEADD() ajoute 1 an au premier rendez-vous). Utilisez ensuite DATEDIFF() pour renvoyer chaque dateparties de la date :

DECLARE @date1 datetime2 = '2000-01-01 00:00:00.0000000';
DECLARE @date2 datetime2 = DATEADD(year, 1, @date1);
SELECT 
    DATEDIFF( year, @date1, @date2 ) AS Years,
    DATEDIFF( quarter, @date1, @date2 ) AS Quarters,
    DATEDIFF( month, @date1, @date2 ) AS Months,
    DATEDIFF( week, @date1, @date2 ) AS Weeks,
    DATEDIFF( dayofyear, @date1, @date2 ) AS DayOfYear,
    DATEDIFF( day, @date1, @date2 ) AS Days;

Résultat :

+---------+------------+----------+---------+-------------+--------+
| Years   | Quarters   | Months   | Weeks   | DayOfYear   | Days   |
|---------+------------+----------+---------+-------------+--------|
| 1       | 4          | 12       | 53      | 366         | 366    |
+---------+------------+----------+---------+-------------+--------+

Exemple 3

Comme mentionné précédemment, vous pouvez également renvoyer le composant temporel entre les dates. Voici un exemple de renvoi d'heures, de minutes et de secondes entre des valeurs date/heure :

DECLARE @date1 datetime2 = '2000-01-01 00:00:00.0000000';
DECLARE @date2 datetime2 = DATEADD(hour, 1, @date1);
SELECT 
    DATEDIFF( hour, @date1, @date2 ) AS Hours,
    DATEDIFF( minute, @date1, @date2 ) AS Minutes,
    DATEDIFF( second, @date1, @date2 ) AS Seconds;

Résultat :

+---------+-----------+-----------+
| Hours   | Minutes   | Seconds   |
|---------+-----------+-----------|
| 1       | 60        | 3600      |
+---------+-----------+-----------+

Exemple 4

Voici un exemple d'obtention du nombre de millisecondes, microsecondes et nanosecondes entre deux valeurs date/heure :

DECLARE @date1 datetime2 = '2000-01-01 00:00:00.0000000';
DECLARE @date2 datetime2 = DATEADD(millisecond, 1, @date1);
SELECT    
    DATEDIFF( millisecond, @date1, @date2 ) AS Milliseconds,
    DATEDIFF( microsecond, @date1, @date2 ) AS Microseconds,
    DATEDIFF( nanosecond, @date1, @date2 ) AS Nanoseconds;

Résultat :

+----------------+----------------+---------------+
| Milliseconds   | Microseconds   | Nanoseconds   |
|----------------+----------------+---------------|
| 1              | 1000           | 1000000       |
+----------------+----------------+---------------+

Exemple 5 - Erreur !

Si vous essayez de faire quelque chose d'extrême, comme renvoyer le nombre de nanosecondes après 100 ans, vous obtiendrez une erreur. En effet, DATEDIFF() renvoie une valeur int et il y a plus de nanosecondes en 100 ans que ce que le type de données int peut gérer.

Que se passera-t-il si vous essayez cela ?

DECLARE @date1 datetime2 = '2000-01-01 00:00:00.0000000';
DECLARE @date2 datetime2 = DATEADD(year, 100, @date1);
SELECT    
    DATEDIFF( millisecond, @date1, @date2 ) AS Milliseconds,
    DATEDIFF( microsecond, @date1, @date2 ) AS Microseconds,
    DATEDIFF( nanosecond, @date1, @date2 ) AS Nanoseconds;

Résultat :

The datediff function resulted in an overflow. The number of dateparts separating two date/time instances is too large. Try to use datediff with a less precise datepart.

Bien sûr, si vous devez vraiment le découvrir d'ici 100 ans, comment il y a beaucoup de nanosecondes, alors vous pouvez utiliser la fonction DATEDIFF_BIG(). Cette fonction renvoie un type de données bigint signé, qui vous permet de renvoyer des valeurs plus grandes que DATEDIFF().

Recommandations associées : "Tutoriel MySQL"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:Qu’est-ce que T-SQL ?Article suivant:Qu’est-ce que T-SQL ?