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.