Quando trabalhamos com scripts em SQL, seja com a finalidade de utilizar os mesmos para alimentar os relatórios do Excel ou do Power BI, ou com a finalidade exploratória necessária para a correta compreensão do banco de dados com o qual estamos trabalhando em um determinado projeto, é comum precisarmos limitar a consulta realizada, quando temos uma massa de dados demasiado extensa.
Uma das formas mais eficientes - e até sensatas de se fazer isto - é limitando a faixa de tempo com a qual vamos trabalhar. Restringir os dados ao ano corrente; aos últimos 12 meses, aos últimos 2 anos (para permitir uma comparação clássica “year-over-year”, por exemplo), ou outro intervalo qualquer.
Para servir de consulta e auxílio nestas situações, estão listadas a seguir algumas expressões de data para a linguagem T-SQL (SQL Server), que podem ajudar muito.
1. Como obter a data atual através de uma consulta em SQL?
select GETDATE () as "Hoje"
Esta expressão retorna o chamado “carimbo de Data e Hora do Sistema”. Com ela é possível obter rapidamente a data atual:

Esta expressão corresponde à função “HOJE()” no Excel ou a função DAX “TODAY()” – usada no Power Pivot e no Power BI.
2. Como obter o último dia do mês atual?
select EOMONTH (GETDATE ()) as "Fim do Mês"
A função EOMONTH retorna o fim do mês, e para isto requer dois parâmetros: uma data como ponto de partida, e um número inteiro, positivo ou negativo, que indica quanto deve-se retroceder ou avançar em relação à data informada no primeiro parâmetro. Ela age sempre no MÊS da data que está sendo dada como parâmetro, ignorando o DIA e o ANO da mesma.
A função GETDATE está dando à função EOMONTH o primeiro parâmetro necessário de forma dinâmica, e a omissão do segundo parâmetro faz com que ela retorne o último dia do mês corrente, como mostra a próxima imagem:

3. Consideremos a utilização do segundo parâmetro da função EOMONTH para encontrar a última data do mês anterior ao atual:
select EOMONTH (GETDATE (), -1) as "Fim do Mês Passado"

4. Ou do próximo mês:
select EOMONTH (GETDATE (), 1) as "Fim do Próximo Mês"

Fica evidente que a manipulação do segundo parâmetro permite retroceder ou avançar na linha do tempo o quanto for necessário. Números negativos permitem voltar no tempo, encontrando datas anteriores à atual, e números positivos permitem avançar, encontrando datas futuras.
E como encontrar a primeira data de um mês qualquer?
5. Encontrando o primeiro dia do mês atual:
select DATEADD (DAY, 1, EOMONTH (GETDATE (), -1)) as "Começo do Mês"
Esta expressão retorna o primeiro dia do mês corrente devido ao seguinte encadeamento:
Como ilustrado no item 3, a expressão “EOMONTH (GETDATE (), -1))” retorna o último dia do mês anterior ao atual. Ela está sendo usada como o terceiro parâmetro da função DATEADD e este parâmetro corresponde à data que se pretende alterar.
A função DAY está sendo usada como primeiro parâmetro, para dar à função DATEADD a dimensão de tempo que se deseja acrescentar à data obtida com a expressão “EOMONTH (GETDATE (), -1))”; e o número “1”, como segundo parâmetro da função DATEADD, está indicando a quantidade que se deve acrescer.
Em outras palavras: acrescente (DATEADD) um (1) dia (DAY) ao último dia do mês anterior (“EOMONTH (GETDATE (), -1))”):

6. Encontrando o primeiro dia do próximo mês.
Da mesma forma, se substituirmos a expressão explicada no item 3, pela explicada no item 2, dentro da DATEADD, encontraremos o primeiro dia do próximo mês:
select DATEADD (DAY, 1, EOMONTH (GETDATE ())) as "Começo do Próximo Mês"

7. Encontrando o primeiro dia do mês anterior.
Se manipularmos o segundo parâmetro da função EOMONTH, como mostrada no item 5, alterando de “-1” para “-2”, encontraremos então o primeiro dia do mês anterior:
select DATEADD (DAY, 1, EOMONTH (GETDATE (), -2)) as "Começo do Mês Passado"

Do mesmo modo, podemos seguir alterando este segundo parâmetro para encontrar qualquer outra data que represente o início de um mês, antes ou adiante do mês atual.
Alterando para “-12”, por exemplo, têm-se a primeira data do período correspondente aos últimos 12 meses:

E esta última expressão, utilizada corretamente em uma cláusula “WHERE” pode limitar o período da consulta SQL de forma dinâmica, retornando sempre os dados correspondentes aos últimos 12 meses:
where EMISSAO >= DATEADD (DAY, 1, EOMONTH (GETDATE (), -12))
Comments