I SQL Server, T-SQL DATEPART() funktion returnerer et heltal, der repræsenterer den angivne datodel af den angivne dato . Du kan f.eks. sende 2021-01-07 og lad SQL Server kun returnere årsdelen (2021 ).
Du kan også udtrække tidsdelen. Du kan f.eks. sende 2018-06-02 08:24:14.3112042 og lad SQL Server kun returnere timedelen (8 ).
Eksempler nedenfor.
Syntaks
Først syntaksen. DATEPART() syntaks ser sådan ud:
DATEPART ( datepart , date )
Hvor datepart er den del af date (en dato- eller tidsværdi), som et heltal vil blive returneret for.
Eksempel 1
Her er et grundlæggende eksempel, hvor jeg returnerer årskomponenten fra en dato.
SELECT DATEPART(year, '2021-01-07') AS Result;
Resultat:
+----------+ | Result | |----------| | 2021 | +----------+
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
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 | +--------+-----------+---------+---------------+-------+--------+-----------+
Eksempel 3
Du kan også hente de forskellige tidsdele fra datoen.
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 | +--------+----------+----------+--------------+---------------+--------------+
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
DATEPART(TZoffset, @date) AS 'Time Zone Offset',
DATEPART(ISO_WEEK, @date) AS 'ISO_WEEK'; Resultat:
+--------------------+------------+ | Time Zone Offset | ISO_WEEK | |--------------------+------------| | 480 | 22 | +--------------------+------------+
I dette eksempel satte jeg datoen til en datetimeoffset format, som inkluderer tidszoneforskydningen. TZoffset returneres på få minutter.
Et hurtigt alternativ
T-SQL tilbyder også en mere kortfattet måde at returnere dag-, måned- eller årskomponenter fra en dato med DAY() , MONTH() og YEAR() funktioner.
De fungerer sådan her:
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 | +-------+---------+--------+
Hent månedens navn eller dagnavnet
Hvis du har brug for at få månedsnavnet eller dagsnavnet, skal du bruge DATENAME() funktion i stedet for. Denne funktion returnerer resultaterne som en tegnstreng, og du kan returnere måneden og ugedagen efter navn. Her er nogle DATENAME() eksempler for at demonstrere, hvad jeg mener.