Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

Produto:

TOTVS Reports

Versões:

12.1.x

Ocorrência:

 

Ambiente:

 

Passo a passo:

 

Conteúdo


Índice
exclude

Exportar para Html, Envio de E-mail com arquivo Html como anexo

TO_DATE (Oracle)|Conteúdo|...

1 - Introdução


 

Na versão 11.80, o provedor de dados é o Microsoft OLE DB Provider for Oracle, disponibilizado pela própria Microsoft, enquanto que na versão 12

o provedor de dados é o Devart ADO .Net Provider, disponibilizado pela empresa Devart.

 

Informações
titleMais Informações

Para saber mais sobre:


2 - Função TO_DATE()


 

Informações
iconfalse
titleSintaxe
TO_DATE( string1 [, format_mask] [, nls_language] )


Descrição dos Parâmetros:

NomeDescriçãoObrigatoriedadeOutras Informações
1string1Cadeia de caracteres que será convertida em uma data válida. 
2format_mask

Máscara que será utilizada para a correta formatação da data.

Informações
title !Importante!

O formato (segundo parâmetro) sempre deve corresponder ao formato da string (primeiro parâmetro), assim o interpretador vai identificar qual formato esta entrando para poder converter a string em data.

Alguns dos formatos disponíveis:

NomeDescrição
1YEARAno, soletrado
2YYYYAno (4 dígitos)
3YYY
YY
Y
Últimos 3, 2, ou 1 digito(s) do ano.
4IYY
IY
I
Últimos 3, 2, ou 1 digito(s) do ano (Padrão ISO).
5IYYYAno (4 dígitos baseados no padrão ISO)
6RRRRRecebe um ano (2 dígitos) e retorna um ano (4 dígitos)
Um valor entre 0-49 irá retornar um ano (20xx).
Um valor entre 50-99 irá retornar um ano (19xx).
7Q1/4 de um ano (1, 2, 3, 4; JAN-MAR = 1).
8MMMês (01-12; JAN = 01).
9MONNome abreviado do mês.
10MONTHNome do mês preenchido com espaços em branco para completar 9 caracteres.
11RMNumeral romano referente ao mês (I-XII; JAN = I).
12WWSemana do ano (1-53) onde a semana 1 começa no primeiro dia do ano e continua ao sétimo dia do ano.
13WSemana do mês (1-5) onde a semana 1 começa no primeiro dia do mês e termina ao sétimo.
14IWSemana do ano (1-52 ou 1-53) baseado no padrão ISO.
15DDia da semana (1-7).
16DAYNome do dia.
17DDDia do mês (1-31).
18DDDDia do ano (1-366).
19DYNome abreviado do dia.
20JDia juliano; O número de dias desde 1 de janeiro de 4712 A.C.
21HHHora do dia (1-12).
22HH12Hora do dia (1-12).
23HH24Hora do dia (0-23).
24MIMinutos (0-59).
25SSSegundos (0-59).
26SSSSSSegundos após a meia-noite (0-86399).
27AM, A.M., PM, ou P.M.Indicador Meridiano.
28AD ou A.DIndicador AD.
29BC ou B.C.Indicador BC.
30TZDInformações do Horário de Verão.
31TZHHora do fuso horário.
32TZMMinutos do fuso horário.
33TZRRegião do fuso horário.
3nls_languageLinguagem utilizada na conversão da cadeia de caracteres em uma data válida 

2.1 - Se aplica a:

A função TO_DATE() pode ser usada nas seguintes versões do Oracle/PLSQL:

Versão
1Oracle 12c
2Oracle 11g
3Oracle 10g
4Oracle 9i
5Oracle 8i

 

2.2 - Exemplo:

Vamos observar alguns exemplos do uso da função TO_DATE():

Informações
iconfalse
titleExemplo 1

TO_DATE('09/07/2003', 'dd/mm/yyyy') Resultado: valor de data referente à 9 de julho de 2003

Informações
iconfalse
titleExemplo 2

TO_DATE('090703', 'DDMMYY') Resultado:valor de data referente à 9 de julho de 2003

Informações
iconfalse
titleExemplo 3

TO_DATE('15032002', 'ddmmyyyy') Resultado:valor de data referente à 15 de março de 2002

 

3 - Microsoft Provider x Devart Provider - TO_DATE()



Existem diversas diferenças entre esses dois provedores de dados, mas vamos focar apenas na função TO_DATE().


 Microsoft OLE DB Provider Devart ADO .Net Provider
 Sim/NãoDescriçãoSim/NãoDescrição
Conversões InternasO padrão da função TO_DATE() é receber um campo do tipo string comoparâmetro, porém com as conversões internas do provedor, mesmo passando um campo do tipo datetime comoparâmetro, a função será executada sem levantar exceções.Funciona conforme o driver nativo do oracle, ou seja, suporta apenas um campo do tipo string como parâmetro, qualquer outro tipo, uma exceção é levantada.
Formatações InternasO padrão da função TO_DATE() é receber uma máscara de formato idêntica ao valor passado como parâmetro, porém com as formatações internas, mesmo passando uma máscara diferente do valor passado como parâmetro, a função será executada sem levantar exceções.Funciona conforme o driver nativo do oracle, ou seja, a máscara do formato têm que ser idêntica ao valor passado como parâmetro.

4 - Exceções Mais Comuns


 

Código ExceçãoDescriçãoSolução
1ORA-01830

 A imagem do formato da data termina antes de converter a string de entrada inteira.

  • Formato utilizado (2 parâmetro) não se encaixa de forma precisa ao valor passado no primeiro parâmetro da função.
    Ex: TO_DATE('02022000', 'dd/mm/yyyy') 

Informar uma máscara de data que condiz com o valor passado como parâmetro.

  • Ex: TO_DATE('02022000', 'ddmmyyyy') 
2ORA-01843

Valor do mês inválido.

  • Valores negativos (x < 0);
  • 0 (x = 0);
  • Maiores que os valores já convencionados para mês (x > 12)

Informar um mês válido.

  • Valores positivos maiores que 0 e menores ou iguais a 12 (x > 0 e x <= 12)
3ORA-01847

Valor do dia inválido.

  • Valores negativos (x < 0);
  • 0 (x = 0);
  • Maiores que os valores já convencionados para dia:
    Jan, Mar, Mai, Jul, Ago, Out, Dez (x > 31)
    Fev (x > 28 ou X > 29 se bissexto),
    Abr, Jun, Set, Nov (x > 30)

 

Informar um dia válido.

  • Valores positivos maiores que 0 e menores ou iguais a:
    Jan, Mar, Mai, Jul, Ago, Out, Dez (x > 0 e x <= 31)
    Fev (x > 0 e (x <= 28 ou X <= 29 se bissexto)),
    Abr, Jun, Set, Nov (x > 0 e x <= 30)

...

 

4.1 - RM, Consultas SQL, Oracle e ORA-01830


 

A Solução geral dada acima, para a exceção de código ORA-01830, logicamente serve também para o produto RM, porém existem algumas peculiaridades que devem ser tratadas de forma isolada.

A principal peculiaridade que trataremos aqui são os parâmetros da Consulta SQL.

 

Para que a exceção de código ORA-01830 não aconteça, devemos ter certeza de que os parâmetros da consulta SQL utilizados na função TO_DATE():

  • Não referenciem campos da base, parâmetros do relatório, campos do relatório, que sejam nativamente do tipo datetime.

    Informações
    titleOBSERVACAO

    Caso referenciem, devem estar acompanhados do sufixo _S; é de extrema importância que esse sufixo esteja presente nesses parâmetros, pois como definimos um tipo prévio para o parâmetro, o processo de execução da Consulta SQL não tem que detectar o tipo, fazendo com que o retorno da consulta seja mais rápido, além disso, como o tipo do parâmetro foi definido como string (cadeia de caracteres), a exceção não deverá ocorrer, lembrando que a máscara do formato deverá ser idêntica ao valor do parâmetro.

Observações: