Documentazione di PostgreSQL 9.0 > Appendici > Supporto di data e orario
PrecedenteCodici di errore di PostgreSQLParole chiave di data e orarioSuccessivo

B. Supporto di data e orario

PostgreSQL™ utilizza un trasformatore interno di tipo euristico per il supporto in input della data e dell'orario. Date e ore sono introdotte come stringhe, e vengono spezzate in campi distinti con una determinazione preliminare di quale tipo di informazione possa trovarsi nel campo. Ogni campo viene interpretato e gli viene anche assegnato un valore numerico, ovvero viene ignorato o rifiutato. Il trasformatore contiene tabelle interne di riferimento per tutti i campi testuali, comprendenti mesi, giorni della settimana, e fusi orari.

Questa appendice contiene informazioni riguardo il contenuto di queste tabelle di riferimento e descrive i passi utilizzati dal trasformatore per decodificare date e orari.

B.1. Interpretazione dell'input di data e orario

I tipi di data e ora in input sono tutti decodificati utilizzando la seguente procedura.

  1. La stringa in input viene spezzata in parti ognuna delle quali viene catalogata come ora, fuso orario o numero.

    1. Se il blocco numerico contiene i due punti (:), esso è una stringa orario. Vengono comprese tutte le cifre e due punti che seguono.

    2. Se il blocco numerico contiene un trattino (-), una barra (/), o due o più punti (.), esso è una stringa data che potrebbe contenere un mese testuale. Se una blocco data è già stato identificato, esso viene invece interpretato come nome di fuso orario (ad esempio, America/New_York).

    3. Se il blocco di testo è solo numerico, allora esso è un singolo campo o una data concatenata secondo ISO 8601 (ad esempio 19990113 per January 13, 1999) o ora (ad esempio, 141516 per 14:15:16).

    4. Se il blocco di testo inizia con un più (+) o un meno (-), allora è un fuso orario numerico o un campo speciale.

  2. Se il blocco è una stringa di testo, viene confrontata con stringhe possibili:

    1. Effettua una ricerca del blocco come abbreviazione di fuso orario da una tabella binaria.

    2. Se non ha trovato nulla, analizza una tabella binaria alla ricerca di corrispondenze del blocco sia come stringa speciale (per esempio today), o come giorno della settimana (per esempio Thursday), mese dell'anno (per esempio January), o ancora parola disturbante (per esempio at, on).

    3. Se non ha trovato nulla, restituisce un errore.

  3. Quando il blocco è un numero o un campo numerico:

    1. Se ci sono otto o sei cifre, e se nessun altro campo data sia stato precedentemente letto, allora lo interpreta come una «data concatenata» (per esempio 19990118 o 990118). L'interpretazione è YYYYMMDD o YYMMDD.

    2. Se il blocco è di tre cifre e un anno è già stato letto, allora lo interpreta come giorno dell'anno.

    3. Se di quattro o sei cifre e un anno è già stato letto, allora lo interpreta come orario (HHMM o HHMMSS).

    4. Se di tre o più cifre e non sono stati ancora trovati campi data, lo interpreta come un anno (questo forza l'ordinamento yy-mm-dd dei restanti campi data).

    5. Altrimenti l'ordinamento del campo data si presume che segua l'impostazione di DateStyle: mm-dd-yy, dd-mm-yy o yy-mm-dd. Restituisce un errore se viene trovato un campo mese o giorno fuori dall'intervallo consentito.

  4. Se è stato specificato BC (Avanti Cristo - A.C.), l'anno viene reso negativo e ne viene aggiunto uno per la conservazione interna (non esiste l'anno zero nel calendario Gregoriano, così numericamente, l'anno 1 BC diventa l'anno zero).

  5. Se non è stato specificato BC, e se il campo anno era della lunghezza di due cifre, allora l'anno viene adattato a quattro cifre. Se il campo è minore di 70, allora viene aggiunto 2000, altrimenti viene aggiutno 1900.

    [Suggerimento]

    Suggerimento

    Gli anni gregoriano AD 1-99 possono essere introdotti utilizzando 4 cifre con zeri precedenti (ad esempio 0099 è l'AD 99).

Documentazione di PostgreSQL 9.0 > Appendici > Supporto di data e orario
PrecedenteCodici di errore di PostgreSQLParole chiave di data e orarioSuccessivo