In SQL Server, T-SQL DATEPART()
la funzione restituisce un numero intero che rappresenta la parte di data specificata della data specificata . Ad esempio, puoi trasmettere 2021-01-07
e fare in modo che SQL Server restituisca solo la parte dell'anno (2021
).
Puoi anche estrarre la parte del tempo. Ad esempio, puoi passare 2018-06-02 08:24:14.3112042
e fare in modo che SQL Server restituisca solo la parte dell'ora (8
).
Esempi sotto.
Sintassi
Innanzitutto la sintassi. Il DATEPART()
la sintassi va così:
DATEPART ( datepart , date )
Dove datepart
è la parte di date
(un valore di data o ora) per il quale verrà restituito un numero intero.
Esempio 1
Ecco un esempio di base in cui restituisco il componente anno da una data.
SELECT DATEPART(year, '2021-01-07') AS Result;
Risultato:
+----------+ | Result | |----------| | 2021 | +----------+
Esempio 2
In questo esempio assegno una data a una variabile, quindi utilizzo più istanze di DATEPART()
per recuperare parti diverse di quella data.
DECLARE @date datetime2 = '2018-06-02 08:24:14.3112042'; SELECT DATEPART(year, @date) AS Year, DATEPART(quarter, @date) AS Quarter, DATEPART(month, @date) AS Month, DATEPART(dayofyear, @date) AS 'Day of Year', DATEPART(day, @date) AS Day, DATEPART(week, @date) AS Week, DATEPART(weekday, @date) AS Weekday;
Risultato:
+--------+-----------+---------+---------------+-------+--------+-----------+ | Year | Quarter | Month | Day of Year | Day | Week | Weekday | |--------+-----------+---------+---------------+-------+--------+-----------| | 2018 | 2 | 6 | 153 | 2 | 22 | 7 | +--------+-----------+---------+---------------+-------+--------+-----------+
Esempio 3
Puoi anche recuperare le varie fasce orarie dalla data.
DECLARE @date datetime2 = '2018-06-02 08:24:14.3112042'; SELECT DATEPART(hour, @date) AS Hour, DATEPART(minute, @date) AS Minute, DATEPART(second, @date) AS Second, DATEPART(millisecond, @date) AS Millsecond, DATEPART(microsecond, @date) AS Microsecond, DATEPART(nanosecond, @date) AS Nanosecond;
Risultato:
+--------+----------+----------+--------------+---------------+--------------+ | Hour | Minute | Second | Millsecond | Microsecond | Nanosecond | |--------+----------+----------+--------------+---------------+--------------| | 8 | 24 | 14 | 311 | 311204 | 311204200 | +--------+----------+----------+--------------+---------------+--------------+
Esempio 4
Puoi anche recuperare il TZoffset
e il ISO_WEEK
datapart.
Il TZoffset
viene restituito come numero di minuti (firmato). Il ISO_WEEK
datepart si riferisce al sistema di data settimanale ISO (parte dello standard ISO 8601) che è un sistema di numerazione per settimane.
DECLARE @date datetimeoffset = '2018-06-02 08:24:14.3112042 +08:00'; SELECT DATEPART(TZoffset, @date) AS 'Time Zone Offset', DATEPART(ISO_WEEK, @date) AS 'ISO_WEEK';
Risultato:
+--------------------+------------+ | Time Zone Offset | ISO_WEEK | |--------------------+------------| | 480 | 22 | +--------------------+------------+
In questo esempio, ho impostato la data su un datetimeoffset
formato, che include l'offset del fuso orario. Il TZoffset
viene restituito in pochi minuti.
Una rapida alternativa
T-SQL offre anche un modo più conciso per restituire i componenti giorno, mese o anno da una data con DAY()
, MONTH()
e YEAR()
funzioni.
Funzionano così:
DECLARE @date datetime2 = '2018-06-02 08:24:14.3112042'; SELECT DAY(@date) AS DAY, MONTH(@date) AS MONTH, YEAR(@date) AS YEAR;
Risultato:
+-------+---------+--------+ | DAY | MONTH | YEAR | |-------+---------+--------| | 2 | 6 | 2018 | +-------+---------+--------+
Ottenere il nome del mese o del giorno
Se devi ottenere il nome del mese o del giorno, utilizza DATENAME()
funzione invece. Questa funzione restituisce i risultati come una stringa di caratteri ed è possibile restituire il mese e il giorno della settimana in base al nome. Ecco alcuni DATENAME()
esempi per dimostrare cosa intendo.