I SQL Server, T-SQL DATENAME()
funktion returnerer en tegnstreng, der repræsenterer den angivne datodel af den angivne dato . Du kan f.eks. sende 2021-01-07
og lad SQL Server kun returnere månedsdelen (January
).
Returtypen for DATENAME()
er nvarchar .
Eksempler nedenfor.
Syntaks
DATENAME()
syntaks ser sådan ud:
DATENAME ( datepart , date )
Hvor datepart
er den del af date
(en dato- eller tidsværdi), som en tegnstreng vil blive returneret for.
Eksempel 1
Her er et grundlæggende eksempel, hvor jeg returnerer månedskomponenten fra en dato.
SELECT DATENAME(month, '2021-01-07') AS Result;
Resultat:
+----------+ | Result | |----------| | January | +----------+
Eksempel 2
I dette eksempel tildeler jeg en dato til en variabel, så bruger jeg flere forekomster af DATEPART()
for at hente forskellige dele af den dato.
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 | +--------+-----------+---------+---------------+-------+--------+-----------+
Eksempel 3
Du kan også hente de forskellige tidsdele fra datoen.
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 | +--------+----------+----------+--------------+---------------+--------------+
Eksempel 4
Du kan også hente TZoffset
og ISO_WEEK
datepart.
TZoffset
returneres som antal minutter (underskrevet). ISO_WEEK
datepart refererer til ISO uge-dato-systemet (en del af ISO 8601-standarden), som er et nummereringssystem for uger.
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 dette eksempel satte jeg datoen til en datetimeoffset
format, som inkluderer tidszoneforskydningen. TZoffset
returneres på få minutter.
Resultaterne af DATENAME()
vil ofte ligne resultaterne fra DATEPART()
(på grund af de fleste datodele er numeriske). Dog DATEPART()
returnerer et heltal i modsætning til en tegnstreng. Derfor DATEPART()
returnerer måneder (og ugedagskomponenten) i numerisk form (f.eks. 1
i stedet for January
).
Få det korte månedsnavn
Hvis du har brug for månedsnavnet, men i dets forkortede 3-bogstavs forkortelsesform (f.eks. Jan
i stedet for January
), tjek min artikel 5 måder at få det korte månedsnavn på fra en dato i SQL Server.