I SQL Server, T-SQL DATEPART()
funktion returnerar ett heltal som representerar den angivna datumdelen av det angivna datumet . Du kan till exempel skicka in 2021-01-07
och låt SQL Server endast returnera årsdelen (2021
).
Du kan också extrahera tidsdelen. Du kan till exempel skicka in 2018-06-02 08:24:14.3112042
och låt SQL Server endast returnera timdelen (8
).
Exempel nedan.
Syntax
Först, syntaxen. DATEPART()
syntax går så här:
DATEPART ( datepart , date )
Där datepart
är delen av date
(ett datum- eller tidsvärde) för vilket ett heltal kommer att returneras.
Exempel 1
Här är ett grundläggande exempel där jag returnerar årskomponenten från ett datum.
SELECT DATEPART(year, '2021-01-07') AS Result;
Resultat:
+----------+ | Result | |----------| | 2021 | +----------+
Exempel 2
I det här exemplet tilldelar jag ett datum till en variabel, sedan använder jag flera instanser av DATEPART()
för att hämta olika delar av det datumet.
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;
Resultat:
+--------+-----------+---------+---------------+-------+--------+-----------+ | Year | Quarter | Month | Day of Year | Day | Week | Weekday | |--------+-----------+---------+---------------+-------+--------+-----------| | 2018 | 2 | 6 | 153 | 2 | 22 | 7 | +--------+-----------+---------+---------------+-------+--------+-----------+
Exempel 3
Du kan också hämta de olika tidsdelarna från datumet.
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;
Resultat:
+--------+----------+----------+--------------+---------------+--------------+ | Hour | Minute | Second | Millsecond | Microsecond | Nanosecond | |--------+----------+----------+--------------+---------------+--------------| | 8 | 24 | 14 | 311 | 311204 | 311204200 | +--------+----------+----------+--------------+---------------+--------------+
Exempel 4
Du kan också hämta TZoffset
och ISO_WEEK
datepart.
TZoffset
returneras som antal minuter (undertecknad). ISO_WEEK
datepart hänvisar till ISO veckodatum-systemet (en del av ISO 8601-standarden) som är ett numreringssystem för veckor.
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';
Resultat:
+--------------------+------------+ | Time Zone Offset | ISO_WEEK | |--------------------+------------| | 480 | 22 | +--------------------+------------+
I det här exemplet ställer jag in datumet till en datetimeoffset
format, som inkluderar tidszonsförskjutningen. TZoffset
returneras på några minuter.
Ett snabbt alternativ
T-SQL erbjuder också ett mer kortfattat sätt att returnera dag-, månads- eller årskomponenter från ett datum med DAY()
, MONTH()
och YEAR()
funktioner.
De fungerar så här:
DECLARE @date datetime2 = '2018-06-02 08:24:14.3112042'; SELECT DAY(@date) AS DAY, MONTH(@date) AS MONTH, YEAR(@date) AS YEAR;
Resultat:
+-------+---------+--------+ | DAY | MONTH | YEAR | |-------+---------+--------| | 2 | 6 | 2018 | +-------+---------+--------+
Hämta månadens namn eller dagnamn
Om du behöver få månadsnamnet eller dagsnamnet, använd DATENAME()
funktion istället. Den här funktionen returnerar resultaten som en teckensträng och du kan returnera månaden och veckodagen med namn. Här är några DATENAME()
exempel för att visa vad jag menar.