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.