Consulta t-sql: Últimos 7 dias , 30 dias e 6 meses.

 

Neste vídeo ensino como filtrar os registros dos últimos 7dias, 30 dias e 180 dias de forma automática no Sql Server. Vamos entender como funciona passo a passo a consulta t-sql abaixo:

 

SELECT id_cupom, format(data_venda,’dd/MM/yyyy HH:mm:ss’) as DataVendaBr, format(valor,’c’,’pt-br’) as ValorReais

FROM bd_vendas_carro.dbo.tab_cupom_vendas

WHERE CAST(data_venda as date)

 between cast( dateadd (day,-7,getdate()) as date) and cast (getdate() as date)

ORDER BY data_venda desc 

 

Na cláusula FROM especifica a tabela bd_vendas_carro.dbo.tab_cupom_vendas, nela contém os dados da venda realizada, as colunas data_venda e valor. E na cláusula WHERE responsável por filtrar as linhas da tabela usou: Coluna data_venda de tipo DATETIME convertido para o tipo DATE, através da função CAST.

Operador BETWEEN define o período do filtro, Data_Inicial ( Hoje – 7 dias, 30 dias ou 180 dias) e a Data Fim (Hoje).

Função DATEADD realiza a adição e subtração a partir de uma data. Nela usou o parâmetro DAY (calcular dias). Parâmetros -7 (subtrair 7 dias), -30 (subtrair 30 dias) e -180 (subtrair 180 dias).

Função GETDATE apresenta a data atual do sistema operacional, neste caso Windows. Usamos o CAST para converter todos os tipos de dados de DATETIME para DATE da coluna data_venda, das funções GETDATE() e DATEADD. SELECT cláusula responsável por exibir as colunas da consulta.

Mostra os campos Data_Venda e valor. A função FORMAT responsável por formatar as datas e valores das vendas para o padrão brasileiro ( DD/MM/ANO) e Reais R$.

Cláusula AS apelida as colunas Data_Venda como as DataVendaBr e o valor como ValorReais. Cláusula ORDER BY ordena a exibição da consulta da Maior para Menor (Recente para mais antiga) Data_Venda.

 

Script usado na vídeo aula:

 

 

 

use master

go

 

 

/*Criar o banco de dados vendas */

 

create database bd_vendas_carro

go

 

/*Seleciona o banco de dados */

 

use bd_vendas_carro

go

 

/*Criar tabela tab_cupom */

 

create table tab_cupom_vendas (

 id_cupom int identity(1,1000),

 data_venda datetime,

 valor  float

 )

 

 go

 

/* Insere registros/ Popular a tabela vendas */

 

DECLARE @numero INT;

SET @numero=0;

WHILE @numero< 1000

BEGIN

    INSERT tab_cupom_vendas  ( data_venda,  valor)

    VALUES ( dateadd(d,-1*@numero,getdate()), @numero * 10)

       –VALUES ( dateadd(d,-1*@numero,getdate()), @numero * 10)

    SET @numero = @numero + 1;

END

go

 

 

/* Consulta t-sql : Últimos 7 dias, 30 dias e 6 meses */

 

select

id_cupom,

  format(data_venda,’dd/MM/yyyy HH:mm:ss’) as DataVendaBr,

  format(valor,’c’,’pt-br’) as ValorReais

from  bd_vendas_carro.dbo.tab_cupom_vendas

 

where CAST(data_venda as date) between cast( dateadd (day,-7,getdate()) as date)  

                               and  cast (getdate() as date)

order by data_venda desc

  

go

 

Sobre Adilson Paranhos 7 Artigos
Formado em Analise e Desenvolvimento de Sistemas, experiência há mais de 10 anos. Amo aprender, ensinar, compartilhar e simplificar coisas... Linguagem T-SQL, consultas básicas e avançadas, filtros, agrupamentos, junções, funções, views, funções de sistemas

2 Comentários

  1. Bom dia!
    Por gentileza.
    Executei todos eles alterando para os dados do meu banco e não funciona.

    Retorna com o seguinte erro.
    Mensagem 1035, Nível 15, Estado 10, Linha 23
    Incorrect syntax near ‘cast’, expected ‘AS’.

    Segue meu select onde a data do meu banco está no padrão americano.

    select
    Codigo_Contrato,
    convert( nvarchar (10), Vencimento_Contrato ,103) as Vencimento_Contrato,
    Tbl_Contratos
    where cast(Vencimento_Contrato as date) between cast( getdate() as date) and cast( dateadd(d, -30, getdate()))

    Se puder dizer o que está errado agradeço.
    Muito obrigado.

    • Oi Diego.

      Desculpa a demora, tive um problema com as configurações de aviso por e-mail, já solucionado.
      Obrigado por visitar e contribuir no Blog.
      Perdoe novamente. Irei responder o mais rápido possível.

      Faltou a cláusula FROM.

      Segue o código sql:
      select
      Codigo_Contrato,
      convert( nvarchar (10), Vencimento_Contrato ,103) as Vencimento_Contrato
      FROM Tbl_Contratos
      where cast(Vencimento_Contrato as date) between cast( getdate() as date) and cast( dateadd(d, -30, getdate()))

      Abraços.

      Adilson Paranhos

Faça um comentário

Seu e-mail não será publicado.


*