O PostgreSQL utiliza um analisador heurístico interno para dar suporte a toda entrada de data e hora. Data e hora são entradas como cadeias de caracteres, e divididas em campos distintos com base 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, ignorado, ou rejeitado. O analisador contém tabelas internas de procura para todos os campos textuais, incluindo meses, dias da semana e zonas horárias.
Este apêndice inclui informações sobre o conteúdo destas tabelas de procura, e descreve os passos utilizados pelo analisador para decodificar data e hora.
As entradas dos tipos data e hora são todas decodificadas utilizando o seguinte procedimento.
Dividir a cadeia de entrada em símbolos (tokens [1] [2] [3] [4] ), e categorizar cada elemento como sendo uma cadeia de caracteres, hora, zona horária ou número.
Se o elemento numérico contiver dois-pontos (:), então é uma cadeia de caracteres de hora. Incluir todos os dígitos e dois-pontos subseqüentes.
Se o elemento numérico 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.
Se o elemento contiver apenas números, então é 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).
Se o elemento começar por um sinal de mais (+), ou de menos (-), então é uma zona horária ou um campo especial.
Se o elemento for uma cadeia de caracteres, estabelecer correspondência com as cadeias de caracteres possíveis.
Fazer uma pesquisa binária do elemento na tabela, para ver se é uma cadeia de caracteres especial (por exemplo, today), um dia da semana (por exemplo, Thursday), um mês (por exemplo, January), ou uma palavra sem efeito (por exemplo, at, on).
Definir valor e máscara de bit para os campos. Por exemplo, definir ano, mês e dia para today e, adicionalmente, hora, minuto e segundo para now.
Se não for encontrado, fazer uma pesquisa binária semelhante na tabela para fazer a correspondência entre o elemento e uma zona horária.
Se ainda não for encontrado, lançar um erro.
Quando o elemento é um número ou campo numérico:
Se contiver 8 ou 6 dígitos, e nenhum outro campo de data foi lido anteriormente, então interpretar como uma "data concatenada" (por exemplo, 19990118 ou 990118). A interpretação é YYYYMMDD ou YYMMDD.
Se o elemento tiver 3 dígitos, e um ano já tiver sido lido, então interpretar como dia do ano.
Se contiver 4 ou 6 dígitos, e o ano já tiver sido lido, então interpretar como hora (HHMM ou HHMMSS).
Se contiver 3 ou mais dígitos, e nenhum campo data foi encontrado anteriormente, interpretar como ano (isto força a ordem yy-mm-dd para os demais campos de data).
Senão, a ordem do campo data é assumida como definida por DateStyle: mm-dd-yy, dd-mm-yy, ou yy-mm-dd. Lançar um erro se o campo mês ou dia estiver fora do intervalo permitido.
Se for especificado BC, tornar o ano negativo e adicionar um para armazenamento interno (Não existe ano zero no Calendário Gregoriano [5] e, portanto, numericamente 1 BC se torna o ano zero).
Se não for especificado BC, e o campo do ano tiver comprimento de dois dígitos, então ajustar o ano para quatro dígitos. Se o campo for inferior a 70, então adicionar 2000, senão adicionar 1900.
Dica: Os anos Gregorianos AD 1-99 [6] 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.
[1] |
token — gramática — Uma unidade básica da linguagem, gramaticalmente indivisível, como uma palavra chave, um operador ou um identificador. FOLDOC - Free On-Line Dictionary of Computing (N. do T.) |
[2] |
SQL Server — token — Na procura de texto integral (full-text search), uma palavra ou uma cadeia de caracteres identificada por um quebrador de palavra (word breaker). SQL Server 2005 Books Online — Glossary of Terms (N. do T.) |
[3] |
DB2 — Os tokens são as unidades sintáticas básicas do SQL. O token é uma seqüência de um ou mais caracteres. O token não pode conter caracteres branco, a menos que seja uma constante cadeia ou um identificador delimitado, que podem conter brancos. DB2 Version 9 for Linux, UNIX, and Windows (N. do T.) |
[4] |
token — [processamento de dados] s. indicação, f.; marca, f.; símbolo, m.; sinal, m.; unidade distinguível em uma seqüência de caracteres. token | Portuguese | Dictionary & Translation by Babylon (N. do T.) |
[5] |
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. do T.) |
[6] |
AD = Anno Domini (N. do T.) |