Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

tntgui

Teste de horario de verao

Recommended Posts

Olá!

 

Estou precisando fazer um teste num campo dentro de um "where". É para ajustar um campo com o horário de verão dependendo de um flag.

 

Se flag = 'd'

então

data - 3/24 (diminuindo 3 horas do campo)

Senão

Se flag = 's' então

data - 2/24 (diminuindo 2 horas do campo)

Fim

 

Inicialmente fiz isso com decode:

decode (HZ.TIME_DST, 's', HZ.TIME -3/24, 'd', HZ.TIME -2/24)

 

Mas a consulta ficou muito lenta.

 

Será q com case ficaria mais rápida? E como seria com case? a sintaxe?

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

O uso do DECODE está correta, passe o SELECT completo junto ao plano de execução para podermos melhorar. Abraços, :unsure:

Compartilhar este post


Link para o post
Compartilhar em outros sites

É pq, na verdade, estou usando BO (nao sei se conhece) e eu só visualizo isso. Me confundi quando disse que isso era a condição! Mas é mais ou menos isso:SELECT decode (HZ.TIME_DST, 's', HZ.TIME -3/24, 'd', HZ.TIME -2/24) as DATA_DSTfrom HZE funciona assim, mas demora 5x mais e são muitos registros...Com CASE nao ficaria mais otimizado?E como seria a sintaxe?Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

OPA!

 

BO = Bussiness Objetcs

 

Bom vamos lá... veja se o case pode te auxiliar melhor que o DECODE.

 

SQL> select rownum, a, b from x;	ROWNUM A												  B---------- -------------------------------------------------- -		 1 Rodrigo Almeida									R		 2 Fernanda Ortiz									   L SQL> select case when b = 'R' then 'Primeira Condição' else 'Segunda Condição' end from x where b = 'R'; CASEWHENB='R'THEN ----------------- Primeira Condi??o SQL> select case when b = 'R' then 'Primeira Condição' else 'Segunda Condição' end from x where b = 'L'; CASEWHENB='R'THEN ----------------- Segunda Condi??o

O uso do CASE pode ser utilizado como acima, ou para mais condições.

 

Veja o que melhor irá te servir.

 

Abraços, :mellow:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu mesmo! Mas conhece alguma função para eu converter para horário de verão direto?Tudo bem que terei que testar de qq jeito o flag, mas se tivesse uma função, acredito que ficaria mais otimizado do que eu pegar o campo e diminuir 3 horas.E as únicas maneiras de eu testar esse flag é com DECODE ou CASE mesmo, nao é?Valeu! Abração

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hummmmmmmmmm...

 

Uma função que pode lhe dar um auxilio é a função NEW_TIME(date, zone1, zone2) que está embutida no SQL, ele pode alterar os valores de NLS_TERRITORY do banco de dados, então se passando a zona que está trabalhando ele pode diminuir ou aumentar conforme a linha de Greenish (não sei escrever o nome direito), ele é o responsável pelos fusos horarios.

 

Tente dar uma estudada nisso e sobre os NLS (National Language Suport) que a Oracle fornece para tentar resolver seu problema.

 

Caso tenha sucesso, poste aí como fez.

 

Abraços, http://forum.imasters.com.br/public/style_emoticons/default/clap.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.