Cet article traite uniquement le cas de SQL Serer 2008. Si vous travaillez avec SQL Server 2005, il est préférable de consulter cet article.
Pour gérer les données de type date et heure SQL Server 2008 propose les types de données suivant:
Les types datetime2, date, time et datetimeoffset sont introduits avec SQL Server 2008. IL sont à privilégier pour tous nouveaux développemant car il permettent une gestion plus fine des données de type date et heure. Par exemple avec le type date seule les informations année, mois et jour sont conservées. Ainsi non seulement l'information est plus compact, mais en plus de nombreux effet de bords peuvent être évités lorsque les informations de type heure, minutes et secondes sont incorrect. Le travail avec les données de type date et time est facilité et la comparaison deviens plus aisée.
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. Dans tous les cas il ne faut pas oublier que le format ISO8601 permet de travailler efficacemement avec des informations représentant les dates et heures
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).

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.

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.

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.

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.

| type | Octets | Precision | Mini | Maxi | test |
|---|---|---|---|---|---|
| datetime2(precision) | 6 à 8 octets suivant la précision | 100 nanosecondes | 01/01/0001 | 31/12/9999 | select CONVERT (datetime2,getdate()); |
| datetimeoffset(precision) | 10 octets | 100 nanosecondes avec un délallage horaire compris entre -14h et +14h | 01/01/0001 | 31/12/9999 | select CONVERT (datetimeoffset,getdate()); |
| date | 3 octets | 1 jour | 01/01/0001 | 31/12/9999 | select CONVERT (date,getdate()); |
| time | 5 octets | 100 nanosecondes | 00:00:00.0000000 | 23:59:59.9999999 | select CONVERT (time,getdate()); |
| datetime | 8 octets | Arrondi à 0, 3 et 7 millème de seconde | 01/01/1753 | 31/12/9999 | select CONVERT (datetime,getdate()); |
| smalldatetime | 4 octets | 1 minute | 01/01/1900 | 06/06/2079 | select CONVERT (smalldatetime,getdate()); |
Pour manipuler les informations contenues dans des colonnes de type datetime et smalldatetime SQL Server proposent différentes fonctions Transact SQL.
Pour en savoir plus article MSDN sur l' utilisation des données de type date et heure.