APSQL

Extraction de date

Le travail avec les données de type date et heure n'est pas toujours facile d'autant plus que les types de données dédiés à ce type d'information se sont multipliés avec SQL Server 2008.

Tout d'abord il est indispensable de ne jamais stocker ce type d'information autrement que dans un type dédié à la gestion des dates et heures. Ainsi toutes les fonctions de manipulation de ces données seront disponibles.

Pour bien faire la distinction entre le format de stockage et le format d'affichage, le plus simple est de faire appel à la fonction getdate qui retourne la date et heure courante du serveur et à la fonction convert qui permet de transposer les données de type date et heure dans un format d'affichage qui nous permet de lire simplement et rapidement l'information.

Ainsi par exemple la requête suivante permet de connaitre la date et heure courante en s'appuyant sur le format d'affichage par défaut

Select getdate();

Tandis qu'en utilisant la fonction convert, il est possible de préciser son propre format d'affichage:

Select convert(varchar(50), getdate(), 113);

La fonction convert dispose ainsi de certains formats d'affichage prédéfinis. Dans le cas où ces formats ne vous conviennent pas il est possible d'extraire l'information que l'on souhaite par l'intermédiaire des fonctions datepart et datename, comme l'illustre l'exemple ci-dessous.

Select datepart(mm,getdate) as mois;
Select datename(mm, getdate) as mois;

Pour toutes les opérations relatives aux dates (additionner un nombre de minutes, d'heures, de jours, de mois, …) les fonctions datediff et dateadd permettent de réaliser simplement et efficacement ces calculs sans risquer de tomber à une heure improbable tout en gérant parfaitement les mois à 28, 29, 30 ou 31 jours.

SQL Server 2008 apporte plus de précision dans la gestion des données de types date et heure avec l'apparition des types date (jour, mois, année), time (heure, minute, seconde) ainsi qu'une amélioration sur la précision de datetime2 et une gestion du décalage horaire avec datetimeoffset. Le tableau ci-dessous résume les différents formats:

Type de donnéesFormatPrécision
timehh:mm:ss[.nnnnnnn]100 nanosecondes
dateAAAA-MM-JJ1 jour
smalldatetimeAAAA-MM-JJ hh:mm:ss1 minute
datetimeAAAA-MM-JJ hh:mm:ss[.nnn]0,00333 seconde
datetime2AAAA-MM-JJ hh:mm:ss[.nnnnnnn]100 nanosecondes
datetimeoffsetAAAA-MM-JJ hh:mm:ss[.nnnnnnn] [+|-]hh:mm100 nanosecondes

D'autres informations sur les données de type date:Les formats de date, Les formats dans SQL Server 2008, Formatter les données de type date.