FirebirdSQL logo
 Structure du langage SQLÉléments communs du langage 

Types de données pour travailler avec la date et l’heure

Firebird utilise les types de données DATE, TIME et TIMESTAMP pour gérer les données contenant la date et l’heure.Dans le dialecte 3, les trois types de données ci-dessus sont présents, tandis que dans le dialecte 1, seul le type de données DATE est disponible pour les opérations de date et d’heure, qui n’est pas identique au type de données DATE du dialecte 3, mais est le type de données TIMESTAMP du dialecte 3.

Note

Dans le dialecte 1, le type DATE peut être déclaré comme TIMESTAMP.Cette déclaration est recommandée pour les nouvelles bases de données en dialecte 1.

Fractions de seconde

Dans les types TIMESTAMP et TIME, Firebird stocke les secondes avec des décimales.Si vous avez besoin d’une granularité inférieure, la précision peut être spécifiée explicitement en millièmes, centièmes ou dixièmes de seconde dans les bases de données en dialecte 3 et ODS 11 et plus.

Note
Quelques informations utiles sur l’exactitude des secondes

La partie temps des types TIME ou TIMESTAMP est un entier de 4 octets (WORD) contenant une valeur de temps avec des fractions de seconde, et stockée comme le nombre de dix millièmes de seconde écoulés depuis minuit.La précision réelle des valeurs obtenues à partir des fonctions et des variables de l’horodateur sera la suivante :

  • CURRENT_TIME — est précis à la seconde par défaut, la précision en millisecondes peut être spécifiée comme suit : CURRENT_TIME (0 | 1 | 2 | 3).

  • CURRENT_TIMESTAMP — est précise à la milliseconde près par défaut, une précision de la seconde à la milliseconde peut être spécifiée comme suitCOURANT_TIMESTAMP (0 | 1 | 2 | 3)

  • LOCALTIME — est précis à la seconde par défaut, la précision en millisecondes peut être spécifiée comme suitLOCALTIME (0 | 1 | 2 | 3)

  • LOCALTIMESTAMP — est précis à la milliseconde près par défaut, une précision de la seconde à la milliseconde peut être spécifiée comme suitLOCALTIMESTAMP (0 | 1 | 2 | 3)

  • Le littéral 'NOW' est précis en millisecondes ;

  • Les fonctions DATEADD et DATEDIFF supportent une précision au dixième de milliseconde.

  • La fonction EXTRACT renvoie des valeurs précises au dixième de milliseconde pour les arguments SECOND et MILLISECOND ;

Stockage des types de fuseaux horaires

Les types de données avec support de fuseau horaire sont stockés comme des valeurs UTC (offset 0) en utilisant la structure TIME ou TIMESTAMP.+ deux octets supplémentaires pour les informations relatives au fuseau horaire (soit un décalage en minutes, soit un identifiant de fuseau horaire nommé).

Le stockage en UTC permet à Firebird d’indexer et de comparer deux valeurs dans des fuseaux horaires différents.

Le stockage en UTC présente quelques inconvénients :

  • Lorsque vous utilisez des zones nommées et que les règles de fuseau horaire de cette zone changent, l’heure en UTC reste la même, mais l’heure locale dans la zone nommée peut changer.

  • Pour le type de données TIME WITH TIME ZONE, lors du calcul du décalage du fuseau horaire pour une zone nommée afin d’obtenir l’heure locale dans la zone, les règles en vigueur à partir du 1er janvier 2020 sont appliquées pour garantir une valeur stable.Cela peut conduire à des résultats inattendus ou déroutants.

DATE

Dans le dialecte 3, le type de données DATE, comme son nom l’indique, ne stocke qu’une date sans heure.Dans le dialecte 1, le type DATE est équivalent au type TIMESTAMP et stocke la date en même temps que l’heure.

La plage de stockage acceptable va de 01.01.0001 à 31.12.9999.

Tip

S’il est nécessaire de sauvegarder uniquement les valeurs de la date dans 1 dialecte, sans l’heure, lors de l’écriture dans le tableau, ajoutez l’heure à la valeur de la date comme suitlittéral '00:00:00.0000'.

Example 1. Exemple d’utilisation DATE
CRETE TABLE DataLog(
  id BIGINT NOT NULL,
  bydate DATE
);
...
AS
  DECLARE BYDATE DATE;
BEGIN
...