tntgui 0 Denunciar post Postado Abril 26, 2006 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
alphamek 2 Denunciar post Postado Abril 26, 2006 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
tntgui 0 Denunciar post Postado Abril 26, 2006 É 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
alphamek 2 Denunciar post Postado Abril 26, 2006 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
tntgui 0 Denunciar post Postado Abril 26, 2006 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
alphamek 2 Denunciar post Postado Maio 4, 2006 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