Maison > base de données > tutoriel mysql > 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)

藏色散人
Libérer: 2019-03-26 13:46:05
original
34034 Les gens l'ont consulté

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 )
Copier après la connexion

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;
Copier après la connexion

Résultat :

+----------+
| Result   |
|----------|
| 365      |
+----------+
Copier après la connexion

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;
Copier après la connexion

Résultat :

+---------+------------+----------+---------+-------------+--------+
| Years   | Quarters   | Months   | Weeks   | DayOfYear   | Days   |
|---------+------------+----------+---------+-------------+--------|
| 1       | 4          | 12       | 53      | 366         | 366    |
+---------+------------+----------+---------+-------------+--------+
Copier après la connexion

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;
Copier après la connexion

Résultat :

+---------+-----------+-----------+
| Hours   | Minutes   | Seconds   |
|---------+-----------+-----------|
| 1       | 60        | 3600      |
+---------+-----------+-----------+
Copier après la connexion

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;
Copier après la connexion

Résultat :

+----------------+----------------+---------------+
| Milliseconds   | Microseconds   | Nanoseconds   |
|----------------+----------------+---------------|
| 1              | 1000           | 1000000       |
+----------------+----------------+---------------+
Copier après la connexion

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;
Copier après la connexion

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.
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal