I SQL Server returnerar T-SQL-funktionen DATENAME()
en teckensträng som representerar den angivna datumdelen av det angivna datumet. Du kan till exempel skicka in 2021-01-07
och få SQL Server att returnera endast månadsdelen (January
).
Returtypen för DATENAME()
är nvarchar.
Exempel nedan.
Syntax
Syntaxen för DATENAME()
ser ut så här:
DATENAME ( datepart , date )
Varvid datepart
är den del av date
(ett datum- eller tidsvärde) för vilken en teckensträng ska 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 och använder sedan flera instanser av DATEPART()
för att hämta olika delar av 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
datumdelen.
Den TZoffset
returneras som antal minuter (signerat). Datumdelen ISO_WEEK
hänvisar till ISO-systemet för veckodatum (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 har jag ställt in datumet till ett datetimeoffset
-format, vilket inkluderar tidszonförskjutningen. TZoffset
returneras i minuter.
Resultaten från DATENAME()
kommer ofta att likna resultaten från DATEPART()
(på grund av att de flesta datumdelar är numeriska). DATEPART()
returnerar dock ett heltal i stället för en teckensträng. Därför returnerar DATEPART()
månader (och veckodagskomponenten) i numerisk form (t.ex. 1
i stället för January
).
Hämtning av det korta månadsnamnet
Om du behöver månadsnamnet, men i dess förkortade form med tre bokstäver (t.ex. Jan
i stället för January
), kan du läsa min artikel 5 Ways to Get the Short Month Name from a Date in SQL Server.