W SQL Server funkcja T-SQL DATEPART() funkcja zwraca liczbę całkowitą, która reprezentuje określoną datapart określonej daty . Na przykład możesz przekazać w 2021-01-07 i mieć SQL Server zwracać tylko część roku (2021 ).
Możesz także wyodrębnić część czasu. Na przykład możesz przekazać w 2018-06-02 08:24:14.3112042 i aby SQL Server zwracał tylko część godzinową (8 ).
Przykłady poniżej.
Składnia
Po pierwsze, składnia. DATEPART() składnia wygląda tak:
DATEPART ( datepart , date )
Gdzie datepart jest częścią date (wartość daty lub godziny), dla której zostanie zwrócona liczba całkowita.
Przykład 1
Oto podstawowy przykład, w którym zwracam składnik roku z daty.
SELECT DATEPART(year, '2021-01-07') AS Result;
Wynik:
+----------+ | Result | |----------| | 2021 | +----------+
Przykład 2
W tym przykładzie przypisuję datę do zmiennej, a następnie używam wielu wystąpień DATEPART() aby pobrać różne części tej daty.
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; Wynik:
+--------+-----------+---------+---------------+-------+--------+-----------+ | Year | Quarter | Month | Day of Year | Day | Week | Weekday | |--------+-----------+---------+---------------+-------+--------+-----------| | 2018 | 2 | 6 | 153 | 2 | 22 | 7 | +--------+-----------+---------+---------------+-------+--------+-----------+
Przykład 3
Możesz także pobrać różne części czasu z daty.
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; Wynik:
+--------+----------+----------+--------------+---------------+--------------+ | Hour | Minute | Second | Millsecond | Microsecond | Nanosecond | |--------+----------+----------+--------------+---------------+--------------| | 8 | 24 | 14 | 311 | 311204 | 311204200 | +--------+----------+----------+--------------+---------------+--------------+
Przykład 4
Możesz także pobrać TZoffset i ISO_WEEK datapart.
TZoffset zwracany jest jako liczba minut (podpisany). ISO_WEEK datepart odnosi się do systemu dat tygodnia ISO (część normy ISO 8601), który jest systemem numeracji tygodni.
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'; Wynik:
+--------------------+------------+ | Time Zone Offset | ISO_WEEK | |--------------------+------------| | 480 | 22 | +--------------------+------------+
W tym przykładzie ustawiłem datę na datetimeoffset format, który obejmuje przesunięcie strefy czasowej. TZoffset jest zwracany w ciągu kilku minut.
Szybka alternatywa
T-SQL oferuje również bardziej zwięzły sposób zwracania składników dnia, miesiąca lub roku z daty za pomocą DAY() , MONTH() i YEAR() funkcje.
Działają tak:
DECLARE @date datetime2 = '2018-06-02 08:24:14.3112042';
SELECT
DAY(@date) AS DAY,
MONTH(@date) AS MONTH,
YEAR(@date) AS YEAR;
Wynik:
+-------+---------+--------+ | DAY | MONTH | YEAR | |-------+---------+--------| | 2 | 6 | 2018 | +-------+---------+--------+
Pobieranie nazwy miesiąca lub nazwy dnia
Jeśli potrzebujesz nazwy miesiąca lub dnia, użyj DATENAME() funkcja zamiast. Ta funkcja zwraca wyniki jako ciąg znaków i możesz zwrócić miesiąc i dzień tygodnia według nazwy. Oto kilka DATENAME() przykłady, aby pokazać, o co mi chodzi.