A continuación hay tres opciones para usar T-SQL para devolver el primer día del mes en SQL Server.
Puede ser el primer día del mes actual o el primer día de un mes según una fecha determinada.
Opción 1
Una forma de hacerlo es así:
DECLARE @date date;
SET @date = '2035-10-15';
SELECT DATEADD(dd, -( DAY( @date ) -1 ), @date);
Resultado:
2035-10-01
Esto implica el uso de algunas funciones de T-SQL para realizar cambios de fecha a fin de que la fecha vuelva al comienzo del mes.
Para más información sobre DATEADD()
y DAY()
funciones, ver DATEADD()
Ejemplos en SQL Server y DAY()
Ejemplos en SQL Server.
Opción 2
Aquí hay otra opción para obtener el primer día del mes:
DECLARE @date date;
SET @date = '2035-10-15';
SELECT DATEADD(month, DATEDIFF(month, 0, @date), 0);
Resultado:
2035-10-01 00:00:00.000
Aquí, incorporamos el DATEDIFF()
función en nuestro cálculo.
Aunque declaramos la variable inicial como date
valor, el resultado es un datetime
valor. Podemos usar CONVERT()
o CAST()
para convertir el resultado a una 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
Opción 3
Aquí hay otra opción:
DECLARE @date datetime;
SET @date = '2035-10-15';
SELECT @date - DAY( @date ) + 1;
Resultado:
2035-10-01 00:00:00.000
Similar a la opción 2, el resultado es un datetime
valor, pero esta vez es porque declaramos la variable como datetime
valor. Sin embargo, podemos darle el mismo tratamiento para convertirlo en una date
valor:
DECLARE @date datetime;
SET @date = '2035-10-15';
SELECT CAST(@date - DAY( @date ) + 1 AS date);
Resultado:
2035-10-01
La razón por la que no declaramos la variable como date
el valor es porque eso daría como resultado un error:
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
Esto se debe a que estamos tratando de agregar un número entero a una date
valor, que no funciona. Sin embargo, agregar un número entero a un datetime
value funciona, y es por eso que declaramos la variable como datetime
.