Tạo chuỗi thời gian cho một năm
Mục tiêu của bài tập này là tạo một chuỗi các ngày cho một năm. Để làm việc này, bạn cần dùng hai hàm thời gian/ngày sau:
GETDATE()DATEADD(datepart, number, date)
Với GETDATE() bạn lấy thời điểm hiện tại (ví dụ: 2019-03-14 20:09:14) và với DATEADD(month, 1, GETDATE()) bạn sẽ có ngày hiện tại cộng thêm một tháng (ví dụ: 2019-04-14 20:09:14).
Để có chuỗi các ngày cho một năm, bạn cần 365 bước đệ quy.
Vì vậy, hãy tăng số vòng lặp bằng OPTION (MAXRECURSION n) trong đó n là số vòng lặp.
Bài tập này là một phần của khóa học
Truy vấn phân cấp và đệ quy trong SQL Server
Hướng dẫn bài tập
- Khởi tạo thời điểm hiện tại là
time. - Chọn CTE theo cách đệ quy và kết hợp phần neo (anchor) và phần đệ quy bằng mệnh đề phù hợp.
- Giới hạn số vòng lặp bằng số ngày trong một năm trừ 1.
- Tăng số vòng lặp tối đa lên bằng số ngày trong một năm với
OPTION (MAXRECURSION n).
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
WITH time_series AS (
SELECT
-- Get the current time
___ AS time
UNION ALL
SELECT
DATEADD(day, 1, time)
-- Call the CTE recursively
FROM ___
-- Limit the time series to 1 year minus 1 (365 days -1)
WHERE time < GETDATE() + ___)
SELECT time
FROM time_series
-- Increase the number of iterations (365 days)
OPTION(MAXRECURSION ___)