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
.