In SQL Server puoi utilizzare DATEADD()
funzione per aggiungere un periodo di tempo specificato a una data data. Puoi anche usarlo per sottrarre un periodo di tempo specificato.
Puoi anche combinare DATEADD()
con altre funzioni per formattare la data come richiesto. Ad esempio, potresti prendere "2020-10-03", aggiungere 10 anni, quindi restituire il componente anno (maggiorato).
Questo articolo contiene esempi da dimostrare.
Sintassi
La sintassi di DATEADD()
va così:
DATEADD (datepart , number , date )
Dove datepart
è la parte della data che vuoi aumentare (o decrementare), number
è l'importo da aumentare datepart
entro e date
è la data in cui avverrà l'aggiunta.
Esempio 1
Ecco un esempio di base dell'aggiunta di dieci anni a una data:
SELECT DATEADD(year, 10, '2020-10-03') AS 'Future Date';
Risultato:
+-------------------------+ | Future Date | |-------------------------| | 2030-10-03 00:00:00.000 | +-------------------------+
In questo caso, il valore restituito include la componente temporale e la data. Questo perché il risultato viene restituito come datetime valore. Il motivo per cui viene restituito come questo tipo di dati è perché abbiamo fornito una stringa letterale come date
discussione. Quando fornisci una stringa letterale come data, DATEADD()
restituisce un data/ora valore.
Nei casi in cui non fornisci una stringa letterale, il valore restituito è lo stesso del tipo di dati di date
discussione. Ad esempio, se fornisci un datetime2 argomento, il valore restituito sarà datetime2 .
Esempio 2 – Formattazione del risultato
Possiamo prendere il risultato sopra e formattarlo con FORMAT()
funzione:
SELECT FORMAT(DATEADD(year, 10, '2020-10-03'), 'yyyy-MM-dd') AS 'yyyy-MM-dd', FORMAT(DATEADD(year, 10, '2020-10-03'), 'dd/MM/yyyy') AS 'dd/MM/yyyy', FORMAT(DATEADD(year, 10, '2020-10-03'), 'yyyy') AS 'yyyy', FORMAT(DATEADD(year, 10, '2020-10-03'), 'yy') AS 'yy';
Risultato:
+--------------+--------------+--------+------+ | yyyy-MM-dd | dd/MM/yyyy | yyyy | yy | |--------------+--------------+--------+------| | 2030-10-03 | 03/10/2030 | 2030 | 30 | +--------------+--------------+--------+------+
Ma è importante notare che il FORMAT()
la funzione restituisce il suo risultato come una stringa.
Un'altra opzione è utilizzare CONVERT()
per convertire il risultato in una data tipo di dati:
SELECT CONVERT(date, DATEADD(year, 10, '2020-10-03')) AS Converted;
Risultato:
+-------------+ | Converted | |-------------| | 2030-10-03 | +-------------+
Oppure puoi usare una funzione come YEAR()
, che restituisce il risultato come intero:
SELECT YEAR(DATEADD(year, 10, '2020-10-03')) AS 'Future Year';
Risultato:
+---------------+ | Future Year | |---------------| | 2030 | +---------------+
Esempio 3 – Sottrazione di date
Puoi utilizzare i numeri negativi per sottrarre dalla data:
SELECT DATEADD(year, -10, '2020-10-03') AS 'Earlier Date';
Risultato:
+-------------------------+ | Earlier Date | |-------------------------| | 2010-10-03 00:00:00.000 | +-------------------------+
E, naturalmente, puoi formattarlo usando uno qualsiasi dei metodi menzionati in precedenza.
Esempio 4 – Date di sistema
Di seguito sono riportati alcuni esempi di utilizzo di varie funzioni per restituire la data/ora corrente dal computer su cui è in esecuzione l'istanza di SQL Server.
SYSDATETIME()
SELECT SYSDATETIME() AS 'Current Date', DATEADD(year, 10, SYSDATETIME()) AS 'Future Date';
Risultato:
+-----------------------------+-----------------------------+ | Current Date | Future Date | |-----------------------------+-----------------------------| | 2018-06-04 05:57:51.7297042 | 2028-06-04 05:57:51.7297042 | +-----------------------------+-----------------------------+
SYSDATETIMEOFFSET()
SELECT SYSDATETIME() AS 'Current Date', DATEADD(year, 10, SYSDATETIME()) AS 'Future Date';
Risultato:
+--------------------------+--------------------------+ | Current Date | Future Date | |--------------------------+--------------------------| | 4/6/18 6:02:07 am +00:00 | 4/6/28 6:02:07 am +00:00 | +--------------------------+--------------------------+
Come accennato, questi risultati vengono restituiti utilizzando il tipo di dati della date
argomento (perché non sono valori letterali stringa).
Formattazione dell'output
SELECT YEAR(SYSDATETIME()) AS 'Current Year', YEAR(DATEADD(year, 10, SYSDATETIME())) AS 'Future Year';
Risultato:
+----------------+---------------+ | Current Year | Future Year | |----------------+---------------| | 2018 | 2028 | +----------------+---------------+
E come anche accennato, se si formatta la data, verrà restituita nel tipo di dati per la funzione applicabile. Quindi, in questo esempio, il risultato viene restituito come int . Se lo avessimo formattato con FORMAT()
funzione, verrebbe restituito come una stringa.