Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

3 maneiras de obter o primeiro dia do mês no SQL Server


Abaixo estão três opções para usar o T-SQL para retornar o primeiro dia do mês no SQL Server.

Este pode ser o primeiro dia do mês atual ou o primeiro dia de um mês com base em uma determinada data.

Opção 1


Uma maneira de fazer é assim:
DECLARE @date date;
SET @date = '2035-10-15';
SELECT DATEADD(dd, -( DAY( @date ) -1 ), @date);

Resultado:
2035-10-01

Isso envolve o uso de algumas funções T-SQL para realizar a mudança de data para obter a data de volta ao início do mês.

Para obter mais informações sobre o DATEADD() e DAY() funções, veja DATEADD() Exemplos no SQL Server e DAY() Exemplos no SQL Server.

Opção 2


Aqui está outra opção para obter o primeiro dia do mês:
DECLARE @date date;
SET @date = '2035-10-15';
SELECT DATEADD(month, DATEDIFF(month, 0, @date), 0);

Resultado:
2035-10-01 00:00:00.000

Aqui, nós incorporamos o DATEDIFF() função em nosso cálculo.

Embora tenhamos declarado a variável inicial como uma date valor, o resultado é um datetime valor. Podemos usar CONVERT() ou CAST() para converter o resultado em uma date valor:
DECLARE @date date;
SET @date = '2035-10-15';
SELECT CAST(DATEADD(month, DATEDIFF(month, 0, @date), 0) AS date);

Resultado:
2035-10-01

Opção 3


Aqui está outra opção:
DECLARE @date datetime;
SET @date = '2035-10-15';
SELECT @date - DAY( @date ) + 1;

Resultado:
2035-10-01 00:00:00.000

Semelhante à opção 2, o resultado é um datetime valor, mas desta vez é porque declaramos a variável como um datetime valor. No entanto, podemos dar o mesmo tratamento para convertê-lo em uma date valor:
DECLARE @date datetime;
SET @date = '2035-10-15';
SELECT CAST(@date - DAY( @date ) + 1 AS date);

Resultado:
2035-10-01

O motivo pelo qual não declaramos a variável como date value é porque isso resultaria em um erro:
DECLARE @date date;
SET @date = '2035-10-15';
SELECT @date - DAY( @date ) + 1;

Resultado:
Msg 206, Level 16, State 2, Line 3
Operand type clash: date is incompatible with int

Isso ocorre porque estamos tentando adicionar um número inteiro a uma date valor, o que não funciona. No entanto, adicionar um número inteiro a um datetime value funciona, e é por isso que declaramos a variável como datetime .