Uma das maiores dificuldades com relação ao gerenciamento e manipulação de bases de dados está relacionado a manipulação de datas, no PL-SQL do Oracle, acho que isso não é um problema. Irei começar com a conversão de string para data (uso da função TO_DATE), mas no Oracle existem várias outras funções de data que são muito fáceis para manipular datas. Abordarei as mesmas em outros artigos.
O TO_DATE recebe 1 parametro obrigatório e dois opcionais como se segue:
to_date( string1, [ format_mask ], [ nls_language ] )
O parametro “string1″ obviamente é a string com o valor que será convertido para a data, ou seja ’01/01/2011′, ou ’2011/01/01′ e muitos outros possíveis dependendo do formato que está configurado no Oracle ou então do formato que você especificar no parametro “format_mask”.
O último parametro, quase não é usado, ele é para definir a linguagem para assim obter qual é o formato padrão daquela lingua.
O parametro “format_mask” será um string com um padrão definido, o qual deve seguir as seguintes opções:
| Parametro |
Explicação |
| YEAR |
Ano por extenso |
| YYYY |
Ano com 4 digitos |
YYY
YY
Y |
Ultimos 3, 2 e 1 digitos do ano. |
IYY
IY
I |
Ultimos 3, 2 e 1 digitos do ano ISO. |
| IYYY |
Ano ISO com 4 digitos |
| RRRR |
Esse foi o modo de se proteger do “bug do milenio”, ele aceita dois digitos de ano se for abaixo de 49 assume como 20XX, se for acima de 49 assume como 19XX. |
| Q |
Trimestre (1 = JAN-MAR, 2 = ABR-JUN, 3 = JUL-SET, 4 = OUT-DEZ). |
| MM |
Mes (01-12; JAN = 01). |
| MON |
Mes por extenso abreviado. |
| MONTH |
Nome do mes por extenso. |
| RM |
Mes em algarismos romanos. |
| WW |
Semana do ano. |
| W |
Semana do mes. |
| IW |
Semana do ano com base no Ano ISO. |
| D |
Dia da semana. |
| DAY |
Dia da semana por extenso. |
| DD |
Dia do mes. |
| DDD |
Dia do ano. |
| DY |
Abreviação do nome do dia. |
| J |
Julian day; O número do dia desde 1, de Janeiro de 4712 Antes de Cristo. |
| HH |
Hora do dia no formato 1-12. |
| HH12 |
Hora do dia no formato 1-12. |
| HH24 |
Hora do dia no formato 0-23. |
| MI |
Minuto. |
| SS |
Segundos. |
| SSSSS |
Segundos passados da meia-noite. |
| FF |
Milisegundos, indique a quantidade de digitos na frente do FF, por exemplo 4 digitos seria FF4. |
| AM, A.M., PM, ou P.M. |
Indicador de hora (Antes do Meio-dia, Pos meio dia) |
| TZH |
Hora com fuso. |
| TZM |
Minuto com fuso. |
| TZR |
Fuso. |
Com todos esses padrões você pode usar tanto para obter uma informação, como para formatar uma data. No caso do TO_DATE, será só para formatar a data, ou seja, dizer o que você quer que a data contenha. Vamos a exemplos:
Atribuindo uma data simples:
select to_date('01/01/2011','DD/MM/YYYY') from dual;
Veja no código que inclusive a string ‘/’ usada na separação também é utilizada na máscara, funcionando como uma máscara padrão. Esse exemplo irá retornar uma data no formato oracle, com dia, mes e ano informados e horas, minutos zerados.
Formatando uma data com hora:
select to_date('01/01/2011 21:10:05','DD/MM/YYYY HH24:MI:SS') from dual;
Nesse exemplo, já mostra a adição de hora, minuto e segundo.
Creio que com esses exemplos e a tabela de padrões, seja suficiente para fazer várias outras combinações, caso tenha alguma dúvida, por favor é só fazer nos comentários que terei prazer em responder.