W SQL Server, T-SQL DATENAME() funkcja zwraca ciąg znaków, który reprezentuje określoną datapart określonej daty . Na przykład możesz przekazać w 2021-01-07 i mieć SQL Server zwracać tylko część miesiąca (January ).
Zwracany typ dla DATENAME() to nvarchar .
Przykłady poniżej.
Składnia
DATENAME() składnia wygląda tak:
DATENAME ( datepart , date )
Gdzie datepart jest częścią date (wartość daty lub godziny), dla której zostanie zwrócony ciąg znaków.
Przykład 1
Oto podstawowy przykład, w którym zwracam składnik miesiąca z daty.
SELECT DATENAME(month, '2021-01-07') AS Result;
Wynik:
+----------+ | Result | |----------| | January | +----------+
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
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; Wynik:
+--------+-----------+---------+---------------+-------+--------+-----------+ | Year | Quarter | Month | Day of Year | Day | Week | Weekday | |--------+-----------+---------+---------------+-------+--------+-----------| | 2018 | 2 | June | 153 | 2 | 22 | Saturday | +--------+-----------+---------+---------------+-------+--------+-----------+
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
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; 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
DATENAME(TZoffset, @date) AS 'Time Zone Offset',
DATENAME(ISO_WEEK, @date) AS 'ISO_WEEK'; Wynik:
+--------------------+------------+ | Time Zone Offset | ISO_WEEK | |--------------------+------------| | +08:00 | 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.
Wyniki DATENAME() często będą przypominać wyniki z DATEPART() (ze względu na to, że większość części daty jest numeryczna). Jednak DATEPART() zwraca liczbę całkowitą, a nie ciąg znaków. Dlatego DATEPART() zwróci miesiące (i składnik dnia tygodnia) w postaci numerycznej (np. 1 zamiast January ).
Pobieranie krótkiej nazwy miesiąca
Jeśli potrzebujesz nazwy miesiąca, ale w formie skróconej, składającej się z 3 liter (na przykład Jan zamiast January ), zapoznaj się z moim artykułem 5 sposobów na uzyskanie krótkiej nazwy miesiąca z daty w SQL Server.