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 .