APSQL

Les dates

Cet article traite des données de type date et heures avec SQL Server 2005. La version de cet article pour SQL Serveur 2008 se trouve sur: http://www.apsql.com/articles/LesFormatsDeDateSQL2008.html.

Pour stocker les informations de type date SQL Server proposer les type des données datetime et smalldattime. Ces 2 types diffèrent par la précision des données stockées. Quelques soit le type choisi il est par la suite possible d'afficher la date à différents format. Les informations de type dates sont stockées dans un format propre à SQL Server puis sont remises en forme lors de l'affichage. De même lors de la saisie il est nécessaire d'indiquer le masque utilisé pour fournir les informations.

Le type datetime permet de stocker une date comprise entre le 1er janvier 1753 et le 31 décembre 9999 avec une précision de 3,33 millisecondes. Une donnée de ce type est stocké sur 8 octets de la façon suivante:

Format datetime

Le type smalldatetime permet quand à luis de stocker des une date comprise entre le 1er janvier 1900 et le 6 juin 2079 avec une précision de 1 minute. Ce type de données est bien adapté pour stocker par exemple des informations telles que la date de création d'une ligne d'information.

Saisir une date

Il est possible de saisir la date sous forme de chaine de caractère puis de convertir cette chaîne de caractère en données de type datetime. La conversion peut être faite de façon implicite (SET DATEFORMAT) ou bien de façon explicite avec la fonction CONVERT.

SET DATEFORMAT

Avec cette instruction, il est possible de définir son propre format de date pour la session en cours. L'instruction SET DATEFORMAT ne concerne que les saisies de dates

SET DATEFORMAT formatDate;

Le format de date permet de savoir dans quel ordre sont fournies les valeurs jour (d), mois (m) et année (y).

exemple set dateformat

CONVERT

La fonction convert, lorsqu'elle est utilisée pour manipuler des dates, accepte 3 paramètres qui sont: le type de destination, l'expression à convertir et le format de date. Pour saisir une date au format jj/mm/aaaa il faut utiliser le style 103 ou bien le style 3 si on se contente d'une année saisie sur 2 chiffres simplement.

exemple convert

Afficher une date

Pour afficher une date et heure, il est nécessaire de convertir les informations au format texte. Cette opération est effectuée de façon implicite par le paramètre de langue ou bien dateformat (s'il à été précisé). Il est possible de réaliser cette opération de conversion de façon explicite avec la fonction CONVERT. Il est également possible de faire appel à la fonction DATENAME pour afficher la date à un format spécifique.

Dans l'exemple suivant, la date et heure courant est affichée au format par défaut.

format par défaut

La fonction CONVERT est utilisée pour convertir la date et heure courante de façon explicite en chaine de caractère en respectant un format prédéfini.

convert format 113

La fonction DATENAME accepte 2 arguments : la partie de la date à extraire et l'information de type datetime avec laquelle travailler.
DATENAME(élémentDeDate, donnéeDeTypeDatetime)
Les éléments de dates sont codés de la façon suivante

Elément Abréviation
année yy, yyyy
trimestre qq, q
mois mm, m
jour dans l'année dy, y
jour dd,d
semaine wk, ww
jour de la semaine dw
heures hh
minutes mi, n
secondes ss, s
millisecondes ms

La fonction DATEPART fonctionne de façon similaire mais va retourner un nombre entier au lieu d'une chaine de caractères.

Dans l'exemple suivant l'année de la date courante est affichée.

Exemple Datename

Manipuler les informations de type date et heure

Pour manipuler les informations contenues dans des colonnes de type datetime et smalldatetime SQL Server proposent différentes fonctions Transact SQL.

  • DATEADD : Ajouter à un date un nombre de minutes, d'heures, de jours, ....
  • DATEDIFF : Ecart entre deux dates en repectant l'unité de mesure (année, mois, jour, heures, ...)
  • DATENAME : Extraire une partie de la date au format caractère
  • DATEPART : Extraire une partie de la date au format numérique
  • DAY : Pour obtenir le numéro du jour dans le mois (équivallent à datepart(d, ...))
  • MONTH : Pour obtenir le numéro du mois dans l'année
  • YEAR : Pour obtenir le numéro de l'année
  • GETDATE : Date et heure du système
  • GETUTCDATE: Date et heure UTC (Greenwich) calculé à partir de la date et heure système.