none
select com datetime RRS feed

  • Pergunta

  •  

    Ola pessoal..

     

    tenho um campo Datetime e preciso fazer uma consulta que verifique apenas se o ano pertence ou nao a um range...

     

    Como faria isso num Select?

     

    Obrigada

    quinta-feira, 24 de julho de 2008 03:19

Respostas

  •  

    vc. pode usar essa intrucao

     

    select campos from tabela where year(campo_data) between 1990 and 2000 -- por exemplo

     

    caso nao seja isso vc. pode explicar melhor a sua ideia

     

    Abs;

    quinta-feira, 24 de julho de 2008 10:27
  • Fernanda,

     

    Outro exemplo, utilizando a função DatePart.

     

    Code Snippet

    Select * from CTProducao_Moinho

    Where DatePart(year,datacontrole)=2008

     

     

    quinta-feira, 24 de julho de 2008 13:29
  • Bom Dia Fernanda,

     

    As duas extraem apenas o ano da data e fazem a consulta. No entanto, embora mais fácil esse tipo de construação costuma ser menos performático. Eu faria da seguinte forma

     

    SELECT * FROM Tabela WHERE Data >= '20070101' AND Data < '20080101'

     

    Essa consulta recupera todos os registros de 2008.

     

    [ ]s,

     

    Gustavo

    quinta-feira, 24 de julho de 2008 13:47

Todas as Respostas

  •  

    vc. pode usar essa intrucao

     

    select campos from tabela where year(campo_data) between 1990 and 2000 -- por exemplo

     

    caso nao seja isso vc. pode explicar melhor a sua ideia

     

    Abs;

    quinta-feira, 24 de julho de 2008 10:27
  • Fernanda,

     

    Outro exemplo, utilizando a função DatePart.

     

    Code Snippet

    Select * from CTProducao_Moinho

    Where DatePart(year,datacontrole)=2008

     

     

    quinta-feira, 24 de julho de 2008 13:29
  • Junior / Marcelo

     

    As duas funcionaram perfeitamente para o que eu queria.

    Qual eh a diferenca entre elas?

     

    Obrigada!

     

    quinta-feira, 24 de julho de 2008 13:34
  • forma de fazer apenas, nao existe diferenca na pratica entre as consultas.

     

     

    Abs;

     

    quinta-feira, 24 de julho de 2008 13:46
  • Bom Dia Fernanda,

     

    As duas extraem apenas o ano da data e fazem a consulta. No entanto, embora mais fácil esse tipo de construação costuma ser menos performático. Eu faria da seguinte forma

     

    SELECT * FROM Tabela WHERE Data >= '20070101' AND Data < '20080101'

     

    Essa consulta recupera todos os registros de 2008.

     

    [ ]s,

     

    Gustavo

    quinta-feira, 24 de julho de 2008 13:47
  • completando o gustavo  se puder evitar o uso de funcoes no where melhor...

     

     

    Abs;

     

    quinta-feira, 24 de julho de 2008 13:49
  •  

    Gustavo...

     

    interessante essa sua colocacao de performance...

    eu nao sabia que poderia ter essa implicação...

     

     

    quinta-feira, 24 de julho de 2008 13:52
  •  

    Marcelo,

     

    no seu exemplo vc usou year...

    tb implica em performance no caso de muitos registros?

     

    quinta-feira, 24 de julho de 2008 13:54
  • Olá Fernanda,

     

    As consultas usando funções são uma tradução natural na formulação da consulta

     

    SELECT -- Selecione

    * -- Os campos

    FROM X -- Da tabela X

    WHERE -- Onde

    YEAR(Data) = 2008 -- o ano seja igual a 2008

     

    No entanto, quando fazemos isso, será necessário ler todas as linhas, extrair o ano e compará-lo. Para tabelas pequenas é aceitável, mas para tabelas muito grandes o desempenho será degradado. Por isso a utilização de funções na cláusula WHERE sobre campos deve ser evitada em consultas (por mais intuitivas que elas pareçam).

     

    [ ]s,

     

    Gustavo

    quinta-feira, 24 de julho de 2008 14:00