I SQL Server, T-SQL DATENAME()
funktion returnerar en teckensträng 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 månadsdelen (January
).
Returtypen för DATENAME()
är nvarchar .
Exempel nedan.
Syntax
DATENAME()
syntax går så här:
DATENAME ( datepart , date )
Där datepart
är delen av date
(ett datum- eller tidsvärde) för vilket en teckensträng kommer att returneras.
Exempel 1
Här är ett grundläggande exempel där jag returnerar månadskomponenten från ett datum.
SELECT DATENAME(month, '2021-01-07') AS Result;
Resultat:
+----------+ | Result | |----------| | January | +----------+
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 DATENAME(year, @date) AS Year, DATENAME(quarter, @date) AS Quarter, DATENAME(month, @date) AS Month, DATENAME(dayofyear, @date) AS 'Day of Year', DATENAME(day, @date) AS Day, DATENAME(week, @date) AS Week, DATENAME(weekday, @date) AS Weekday;
Resultat:
+--------+-----------+---------+---------------+-------+--------+-----------+ | Year | Quarter | Month | Day of Year | Day | Week | Weekday | |--------+-----------+---------+---------------+-------+--------+-----------| | 2018 | 2 | June | 153 | 2 | 22 | Saturday | +--------+-----------+---------+---------------+-------+--------+-----------+
Exempel 3
Du kan också hämta de olika tidsdelarna från datumet.
DECLARE @date datetime2 = '2018-06-02 08:24:14.3112042'; SELECT DATENAME(hour, @date) AS Hour, DATENAME(minute, @date) AS Minute, DATENAME(second, @date) AS Second, DATENAME(millisecond, @date) AS Millsecond, DATENAME(microsecond, @date) AS Microsecond, DATENAME(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 DATENAME(TZoffset, @date) AS 'Time Zone Offset', DATENAME(ISO_WEEK, @date) AS 'ISO_WEEK';
Resultat:
+--------------------+------------+ | Time Zone Offset | ISO_WEEK | |--------------------+------------| | +08:00 | 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.
Resultaten av DATENAME()
kommer ofta att likna resultaten från DATEPART()
(beroende på att de flesta datumdelarna är numeriska). Däremot DATEPART()
returnerar ett heltal i motsats till en teckensträng. Därför DATEPART()
returnerar månader (och veckodagskomponenten) i numerisk form (t.ex. 1
istället för January
).
Få det korta månadens namn
Om du behöver månadsnamnet, men i dess förkortade, trebokstaviga förkortningsform (till exempel Jan
istället för January
), kolla in min artikel 5 sätt att få det korta månadsnamnet från ett datum i SQL Server.