Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

3 modi per ottenere il primo giorno del mese in SQL Server

Di seguito sono riportate tre opzioni per l'utilizzo di T-SQL per restituire il primo giorno del mese in SQL Server.

Potrebbe essere il primo giorno del mese corrente o il primo giorno di un mese in base a una data specifica.

Opzione 1

Un modo per farlo è questo:

DECLARE @date date;
SET @date = '2035-10-15';
SELECT DATEADD(dd, -( DAY( @date ) -1 ), @date);

Risultato:

2035-10-01

Ciò comporta l'utilizzo di alcune funzioni T-SQL per eseguire lo spostamento della data in modo da riportare la data all'inizio del mese.

Per ulteriori informazioni su DATEADD() e DAY() funzioni, vedere DATEADD() Esempi in SQL Server e DAY() Esempi in SQL Server.

Opzione 2

Ecco un'altra opzione per ottenere il primo giorno del mese:

DECLARE @date date;
SET @date = '2035-10-15';
SELECT DATEADD(month, DATEDIFF(month, 0, @date), 0);

Risultato:

2035-10-01 00:00:00.000

Qui, abbiamo incorporato il DATEDIFF() funzione nel nostro calcolo.

Anche se abbiamo dichiarato la variabile iniziale come date value, il risultato è un datetime valore. Possiamo usare CONVERT() o CAST() per convertire il risultato in una date valore:

DECLARE @date date;
SET @date = '2035-10-15';
SELECT CAST(DATEADD(month, DATEDIFF(month, 0, @date), 0) AS date);

Risultato:

2035-10-01

Opzione 3

Ecco un'altra opzione:

DECLARE @date datetime;
SET @date = '2035-10-15';
SELECT @date - DAY( @date ) + 1;

Risultato:

2035-10-01 00:00:00.000

Simile all'opzione 2, il risultato è un datetime value, ma questa volta è perché abbiamo dichiarato la variabile come datetime valore. Tuttavia, possiamo dargli lo stesso trattamento per convertirlo in una date valore:

DECLARE @date datetime;
SET @date = '2035-10-15';
SELECT CAST(@date - DAY( @date ) + 1 AS date);

Risultato:

2035-10-01

Il motivo per cui non abbiamo dichiarato la variabile come date value è perché ciò comporterebbe un errore:

DECLARE @date date;
SET @date = '2035-10-15';
SELECT @date - DAY( @date ) + 1;

Risultato:

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

Questo perché stiamo cercando di aggiungere un numero intero a una date valore, che non funziona. Tuttavia, aggiungendo un numero intero a un datetime value funziona, ed è per questo che abbiamo dichiarato la variabile come datetime .