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.