sql >> Base de Datos >  >> RDS >> Sqlserver

3 formas de obtener el primer día del mes en SQL Server

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 .