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
.