Trong SQL Server, T-SQL DATEPART()
hàm trả về một số nguyên đại diện cho ngày tháng được chỉ định của ngày được chỉ định . Ví dụ:bạn có thể chuyển vào 2021-01-07
và có SQL Server chỉ trả về phần năm (2021
).
Bạn cũng có thể trích xuất phần thời gian. Ví dụ:bạn có thể chuyển vào 2018-06-02 08:24:14.3112042
và yêu cầu SQL Server chỉ trả lại phần giờ (8
).
Ví dụ bên dưới.
Cú pháp
Đầu tiên, cú pháp. DATEPART()
cú pháp như sau:
DATEPART ( datepart , date )
Nơi datepart
là một phần của date
(giá trị ngày hoặc giờ) mà một số nguyên sẽ được trả về.
Ví dụ 1
Đây là một ví dụ cơ bản mà tôi trả về thành phần năm từ một ngày.
SELECT DATEPART(year, '2021-01-07') AS Result;
Kết quả:
+----------+ | Result | |----------| | 2021 | +----------+
Ví dụ 2
Trong ví dụ này, tôi chỉ định ngày cho một biến, sau đó tôi sử dụng nhiều phiên bản của DATEPART()
để truy xuất các phần khác nhau của ngày đó.
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;
Kết quả:
+--------+-----------+---------+---------------+-------+--------+-----------+ | Year | Quarter | Month | Day of Year | Day | Week | Weekday | |--------+-----------+---------+---------------+-------+--------+-----------| | 2018 | 2 | 6 | 153 | 2 | 22 | 7 | +--------+-----------+---------+---------------+-------+--------+-----------+
Ví dụ 3
Bạn cũng có thể truy xuất các phần thời gian khác nhau từ ngày.
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;
Kết quả:
+--------+----------+----------+--------------+---------------+--------------+ | Hour | Minute | Second | Millsecond | Microsecond | Nanosecond | |--------+----------+----------+--------------+---------------+--------------| | 8 | 24 | 14 | 311 | 311204 | 311204200 | +--------+----------+----------+--------------+---------------+--------------+
Ví dụ 4
Bạn cũng có thể truy xuất TZoffset
và ISO_WEEK
datepart.
TZoffset
được trả về dưới dạng số phút (đã ký). ISO_WEEK
datepart đề cập đến hệ thống ngày theo tuần ISO (một phần của tiêu chuẩn ISO 8601) là hệ thống đánh số cho các tuần.
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';
Kết quả:
+--------------------+------------+ | Time Zone Offset | ISO_WEEK | |--------------------+------------| | 480 | 22 | +--------------------+------------+
Trong ví dụ này, tôi đặt ngày thành datetimeoffset
định dạng, bao gồm chênh lệch múi giờ. TZoffset
được trả lại sau vài phút.
Một giải pháp thay thế nhanh chóng
T-SQL cũng cung cấp một cách ngắn gọn hơn để trả về các thành phần ngày, tháng hoặc năm từ một ngày với DAY()
, MONTH()
và YEAR()
các chức năng.
Chúng hoạt động như thế này:
DECLARE @date datetime2 = '2018-06-02 08:24:14.3112042'; SELECT DAY(@date) AS DAY, MONTH(@date) AS MONTH, YEAR(@date) AS YEAR;
Kết quả:
+-------+---------+--------+ | DAY | MONTH | YEAR | |-------+---------+--------| | 2 | 6 | 2018 | +-------+---------+--------+
Lấy tên tháng hoặc tên ngày
Nếu bạn cần lấy tên tháng hoặc tên ngày, hãy sử dụng DATENAME()
chức năng thay thế. Hàm này trả về kết quả dưới dạng một chuỗi ký tự và bạn có thể trả về tháng và ngày trong tuần theo tên. Đây là một số DATENAME()
ví dụ để chứng minh ý tôi muốn nói.