Como trabalhar com Datas no PL-SQL (to_date)

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.

Related Posts with Thumbnails
You can leave a response, or trackback from your own site.

4 Comments

  • At 2011.06.09 16:30, KELLY said:
    OLÁ,
    GOSTEI DESTE POST POREM INFELIZMENTE NAO ATENDEU MINHA NECESSIDADE.
    GOSTARIA DE SABER COMO TRATAR 2 DATAS E CALCULAR O TEMPO EM SEMANAS
    EXEMPLO:
    PREVISÃO DE INTERNAÇÃO – 4 SEMANAS
    TRABALHO COM ORACLE 11g
    CAMPOS
    DT_ENTRADA_UNIDADE
    DT_PREVISTO_ALTA
    E TEM OUTRO QUE ESTOU TENTANDO VER SE SERVE : QT_DIA_PERMANENCIA
    • At 2011.06.09 17:04, Meison Almeida said:
      Olá Kelly,

      Obrigado, tem um jeito simples de resolver. Todo o calculo que se faz com datas ele retorna em dias, por exemplo: DATA1 – DATA2, vai retornar a diferença em dias, se você dividir isso por 7, terá a quantidade de semanas. Lembrando que poderá ser um número quebrado.

      Se o campo QT_DIA_PERMANENCIA já está com o dado válido é só dividilo por 7.

      Exemplo: SELECT TRUNC(QT_DIA_PERMANENCIA/7) FROM….

      Com o TRUNC você veria só semanas inteiras, então se o tempo for de 13 dias ou seja, 1 semana e 6 dias… Ele te retornará somente 1.

      Espero ter ajudado…

      • At 2014.03.25 07:31, Age of Warring Empire Hack said:
        Hi, i think that i saw you visited my blog thus i came to
        return the desire?.I am trying to in finding issues to
        improve my web site!I guess its good enough to make use of a few
        of your concepts!!
        • At 2014.03.25 09:19, Melissa said:
          Do you mind if I quote a few of your articles as long as
          I provide credit and sources back to your website?
          My website is in the exact same area of interest as yours
          and my users would certainly benefit from some of the information you present
          here. Please let me know if this okay with you.
          Cheers!
          (Required)
          (Required, will not be published)

          Powered by WordPress | Free T-Mobile phones at BestInCellPhones.com. | Thanks to Verizon Wireless, Facebook Games and The diet solution