Apêndice A. Suporte a data e hora

Índice
A.1. Interpretação da entrada de data e hora
A.2. Palavras chave para data e hora
A.3. História das unidades

O PostgreSQL utiliza um analisador heurístico interno para apoiar a entrada da data e da hora. Data e hora são entradas como cadeias de caracteres, e divididas em campos distintos baseado na determinação preliminar do tipo de informação que pode estar contida no campo. Cada campo é interpretado e, em seguida, atribuído um valor numérico, ou é ignorado, ou é rejeitado. O analisador possui tabelas internas de procura para todos os campos textuais, incluindo meses, dias da semana e zonas horárias.

Este apêndice inclui informações relativas às tabelas de procura, e descreve os passos utilizados pelo analisador para decodificar data e hora.

A.1. Interpretação da entrada de data e hora

Todos os tipos de data e hora são decodificados utilizando um conjunto comum de rotinas.

Interpretação da entrada de data e hora

  1. Dividir a cadeia de caracteres entrada em partes (tokens), categorizando cada parte como sendo uma cadeia de caracteres, hora, zona horária ou número.

    1. Se a parte numérica contiver dois-pontos (:), então é uma cadeia de caracteres de hora. Incluir todos os dígitos e dois-pontos seguintes.

    2. Se a parte numérica contiver hífen (-), barra (/), ou dois ou mais pontos (.), então é uma cadeia de caracteres de data que pode conter o mês na forma de texto.

    3. Se a parte contiver apenas números, então é apenas um campo único, ou uma data ISO 8601 concatenada (por exemplo, 19990113 para 13 de janeiro de 1999), ou hora (por exemplo, 141516 para 14:15:16).

    4. Se a parte começa por um sinal de mais (+) ou de menos (-), então se trata de uma zona horária ou de um campo especial.

  2. Se a parte for uma cadeia de caracteres, fazer correspondência com os valores possíveis.

    1. Fazer pesquisa binária da parte na tabela de procura tentando correspondência com uma cadeia de caracteres especial (por exemplo, today), um dia da semana (por exemplo, Thursday), um mês (por exemplo, January), ou uma palavra ruído (por exemplo, at, on).

      Colocar os valores do campo e a máscara de bit para os campos. Por exemplo, colocar ano, mês e dia para today e, adicionalmente, colocar hora, minuto e segundo para now.

    2. Se não houver correspondência, realizar uma pesquisa binária semelhante na tabela de procura tentando correspondência com zona horária.

    3. Se não for encontrado, gerar erro.

  3. A parte é um número ou campo numérico.

    1. Havendo mais de 4 dígitos, e nenhum outro campo de data foi lido anteriormente, então interpretar como uma "data concatenada" (por exemplo, 19990118). Se contiver 8 ou 6 dígitos interpretar como ano, mês e dia, enquanto com 7 ou 5 dígitos interpretar como ano e dia do ano, respectivamente.

    2. Se a parte contiver 3 dígitos e um ano já tiver sido decodificado, então interpretar como dia do ano.

    3. Se contiver 4 ou 6 dígitos, e o ano já tiver sido lido, então interpretar como hora.

    4. Se contiver 4 ou mais dígitos, então interpretar como ano.

    5. Se estiver no modo de data European, e o campo dia ainda não tiver sido lido, e o valor for menor ou igual a 31, então interpretar como dia.

    6. Se o campo do mês ainda não tiver sido lido, e o valor for menor ou igual a 12, então interpretar como mês.

    7. Se o campo do dia ainda não tiver sido lido, e o valor for menor ou igual 31, então interpretar como dia.

    8. Se tiver dois, quatro ou mais dígitos, então interpretar como ano.

    9. Senão, gerar erro.

  4. Se BC for especificado, tornar o ano negativo e adicionar um para armazenamento interno (Não existe ano zero no Calendário Gregoriano [1] e, portanto, numericamente 1BC se torna o ano zero).

  5. Se BC não for especificado, e o campo do ano tiver comprimento de dois dígitos, então adjustar o ano para quatro dígitos. Se o campo for inferior a 70 adicionar 2000, senão adicionar 1900.

    Dica: Os anos Gregorianos AD 1-99 [2] podem ser entrados utilizando 4 dígitos com zeros à esquerda (por exemplo, 0099 é AD 99). As versões anteriores do PostgreSQL aceitavam anos com três dígitos e com um dígito, mas a partir da versão 7.0 as regras ficaram mais rigorosas para reduzir a possibilidade de ambigüidade.

Notas

[1]

São dois os Calendário Cristãos ainda em uso no mundo: O Calendário Juliano foi proposto por Sosígenes, astrônomo de Alexandria, e introduzido por Julio César em 45 AC. Foi usado pelas igrejas e países cristãos até o século XVI, quando começou a ser trocado pelo Calendário Gregoriano. Alguns países, como a Grécia e a Rússia, o usaram até o século passado. Ainda é usado por algumas Igrejas Ortodoxas, entre elas a Igreja Russa; O Calendário Gregoriano foi proposto por Aloysius Lilius, astrônomo de Nápoles, e adotado pelo Papa Gregório XIII, seguindo as instruções do Concílio de Trento (1545-1563). O decreto instituindo esse calendário foi publicado em 24 de fevereiro de 1582. - Calendários (N.T.)

[2]

AD = Annus Domini = DC (N.T.)