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 param�tre 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 NULL 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.