Annexe B. Support de Date/Heure

Table des matières
B.1. Interprétation des Entrées Date/Heure
B.2. Mots clés Date/Heure
B.3. Histoire d'Unités

PostgreSQL utilise un analyseur heuristique interne pour le support des dates/heures données en entrée. Les dates et heures sont entrées en tant que chaînes, et sont découpées en champs distincts avec une détermination préliminaire du type d'information contenu dans le champ. Chaque champ est interpreté et soit il lui est attribué une valeur numérique, soit il est ignoré ou rejeté. Le parseur contient des tables de correspondance internes pour tout les champs textuels y compris les mois, les jours de la semaine et les fuseaux horaires.

Cette annexe contient des informations sur le contenu de ces tables de correspondance et décrit les méthodes utilisées par le parseur pour décoder les dates et heures.

B.1. Interprétation des Entrées Date/Heure

Les entrées de type date/heure sont toutes décodées en utilisant le processus suivant.

  1. Diviser la chaîne d'entrée en marqueurs et cataloguer chaque marqueur en tant que une chaîne, heure, fuseau horaire ou nombre.

    1. Si un marqueur numérique contient les deux points (:), ceci est une chaîne d'heure. Inclure tout les chiffres et deux points suivants.

    2. Si un marqueur numérique contient un tiret (-), une barre oblique (/), ou plus d'un point (.), ceci est une chaîne de date qui contient peut être un mois sous forme de texte.

    3. Si un marqueur est uniquement numérique alors il est soit un champ simple ou une date concaténée ISO 8601 (i.e., 19990113 pour le 13 janvier 1999) ou heure (i.e., 141516 pour 14:15:16).

    4. Si le marqueur commence avec un plus (+) ou un moins (-), alors il est soit un fuseau horaire, soit un champ spécial.

  2. Si un marqueur est une chaîne texte, le comparer avec les différentes chaînes possibles.

    1. Faire une recherche binaire dans la table de correspondance pour le marqueur en tant que chaîne spéciale (i.e., today), jour (i.e., Thursday), mois (i.e., January), ou mot bruit (i.e., at, on).

      Fixer les valeurs pour chaque champ ainsi qu'un masque binaire. Par exemple, fixer l'année, le mois, le jour pour today, et aussi l'heure, les minutes, les secondes pour now.

    2. Si pas trouvé, faire une recherche binaire similaire dans une table de correspondance pour faire correspondre le marqueur avec un fuseau horaire.

    3. Si toujours pas trouvé, lever une erreur.

  3. Quand le marqueur est un nombre ou un champ de nombre:

    1. S'il y a huit ou six chiffres, et aucun autre champ date n'a été lu, alors l'interpréter comme une << date concaténée >> (i.e., 19990118 ou 990118). L'interprétation est AAAAMMJJ ou AAMMJJ.

    2. Si le marqueur est de trois chiffres et une année a déjà été lue, alors il sera interprété comme un jour de l'année.

    3. Si quatre ou six chiffres et une année ont déjà été lus, alors il sera interprété comme une heure (HHMM or HHMMSS).

    4. Si trois chiffres ou plus et aucun champ date n'a été trouvé, il sera interprété comme année (ceci force l'ordre aa-mm-jj des champs dates restants).

    5. Sinon l'ordre de champ date est supposé suivre le parametre datestyle : mm-jj-aa, jj-mm-aa, ou aa-mm-jj. Lever une erreur si un champ jour ou mois est découvert hors des limites.

  4. Si BC a été spécifié, rendre nulle l'année et ajouter un pour le stockage interne. (Il n'y a pas d'année zéro dans le calendrier Grégorien, alors numériquement 1 BC devient l'année zéro.)

  5. Si BC n'a pas été spécifié et le champ année fait deux chiffres en longueur, alors ajuster l'année a quatre chiffres. Si le champ vaut moins que 70 alors ajouter 2000, sinon ajouter 1900.

    Astuce : Les années Grégoriennes AD 1-99 peuvent être entrées en utilisant 4 chiffres avec les zéros de devant (i.e., 0099 est AD 99). Les versions précédentes de PostgreSQL acceptaient les années avec trois chiffres et avec un seul chiffre mais depuis la version 7.0, les regles ont été renforcées pour réduire de possibles ambiguïtés.