DATEADD trong SQL là một hàm quan trọng, cho phép thêm hoặc trừ một số đơn vị thời gian từ một ngày hoặc giá trị thời gian cụ thể. Điều này cung cấp một cách tiện lợi để thực hiện các tính toán và xử lý dữ liệu liên quan đến ngày tháng trong các truy vấn SQL.

Trong bài viết này, KPIM sẽ khám phá khái niệm và chức năng của hàm DATEADD, cùng với một số ví dụ và ứng dụng phổ biến trong SQL.

Hàm DATEADD(): giải pháp dịch chuyển khoảng thời gian theo ngày, tháng, năm

Hàm đầu tiên mình muốn giới thiệu với mọi người chính là DATEADD(). Có thể nói đây là hàm được cộng đồng Power BI vô cùng ưa chuộng bởi tính linh hoạt và dễ sử dụng của nó.

Hàm DATEADD() trả về một bảng có chứa cột ngày, được dịch chuyển tiến hoặc lùi theo số lượng khoảng thời gian được chỉ định từ các ngày trong bối cảnh hiện tại. Bạn có thể tiến lùi theo ngày, tháng, quý hoặc năm. Hãy cùng quan sát cấu trúc của DATEADD():

				
					DATEADD(<dates>,<number_of_intervals>,<interval>)
				
			

Để sử dụng hàm DATEADD(), bạn sẽ phải đưa vào:

  • Một trường thời gian DATE để sử dụng là ngày bắt đầu
  • Số lượng khoảng thời gian dịch chuyển: 1, 2, ….
  • Xác định khoảng thời gian bạn muốn dịch chuyển (Day, Month, Quarter, Year)

Lãy lấy ví dụ, bạn muốn sử dụng DATEADD() để tính doanh thu của năm ngoái, chúng ta sẽ dùng công thức:

				
					Total sales 1 year back = CALCULATE([Total Sales], DATEADD('Date'[Date],-1, YEAR))
				
			
Sử dụng DATEADD để tính doanh thu của năm ngoái,

Sử dụng DATEADD() để tính doanh thu của năm ngoái,

Sử dụng DATEADD() để so sánh doanh thu giữa các tháng

Giờ hãy thử tính doanh thu của 2 tháng trước tháng hiện tại xem, ta chỉ việc thay đổi khoảng thời gian mà thôi:

				
					Total Sales 2 months back = CALCULATE([Total Sales], DATEADD('Date'[Date], – 2, MONTH))
				
			
Sử dụng DATEADD() để so sánh doanh thu giữa các tháng

Sử dụng DATEADD() để so sánh doanh thu giữa các tháng

Sử dụng DATEADD() để so sánh doanh thu giữa các quý

Một trong những so sánh hay được đặt ra đó là liệu chúng ta có làm tốt hơn quý trước hay không? Hãy thử tính doanh thu của các tháng so với cùng thời điểm quý trước nhé.

				
					Total Sales 1 quarter back = CALCULATE([Total Sales], DATEADD('Date'[Date], – 1, QUARTER))
				
			
Sử dụng DATEADD() để so sánh doanh thu giữa các quý

Sử dụng DATEADD() để so sánh doanh thu giữa các quý

Sử dụng hàm DATEADD() để so sánh giá stock giữa các ngày

Giả sử, bạn đang đầu tư chứng khoán, và muốn tìm hiểu giá cổ phiểu của Tesla và xem xem tình hình cổ phiếu giữa hiện tại với một tuần trước đó, DATEADD() giúp bạn dễ dàng tính và làm điều này. Chúng ta sẽ dùng công thức sau để tính giá cổ phiếu của 7 ngày trước.

				
					Price a week ago = CALCULATE([Price today],DATEADD(TSLA[Date], – 7, DAY))
				
			
Sử dụng hàm DATEADD() để so sánh giá

Sử dụng hàm DATEADD() để so sánh giá

Các hàm liên quan và tương tự DATEADD trong SQL

Trong SQL, có nhiều hàm liên quan và tương tự DATEADD() được sử dụng để xử lý và tính toán ngày tháng. Các hàm này cung cấp các khả năng khác nhau để thay đổi, trích xuất và làm việc với thông tin thời gian.

DATEDIFF: Tính số lượng đơn vị thời gian giữa hai ngày

Hàm DATEDIFF được sử dụng để tính số lượng đơn vị thời gian (như ngày, tháng, năm, giờ, phút, giây) giữa hai ngày. Cú pháp chung của hàm này là:

				
					DATEDIFF(datepart, startdate, enddate)
				
			

Ví dụ, để tính số ngày giữa hai ngày, bạn có thể sử dụng:

				
					SELECT DATEDIFF(day, ‘2023-06-01’, ‘2023-06-08’) AS DayDifference;


				
			

Kết quả sẽ là 7, vì có 7 ngày giữa ‘2023-06-01’ và ‘2023-06-08’.

DATEPART: Trích xuất thành phần thời gian từ một ngày

Hàm DATEPART được sử dụng để trích xuất một thành phần cụ thể (như năm, tháng, ngày, giờ, phút, giây) từ một ngày hoặc một giá trị thời gian. Cú pháp chung của hàm này là:

				
					DATEPART(datepart, date)
				
			

Ví dụ, để trích xuất năm từ ngày '2023-06-01', bạn có thể sử dụng:

				
					SELECT DATEPART(year, ‘2023-06-01’) AS YearValue;
				
			

Kết quả sẽ là 2023, vì năm của ngày đó là 2023.

GETDATE và CURRENT_TIMESTAMP: Lấy ngày hiện tại

Hai hàm GETDATECURRENT_TIMESTAMP được sử dụng để lấy ngày và thời gian hiện tại từ hệ thống. Cả hai hàm này trả về giá trị ngày và thời gian hiện tại theo định dạng chuẩn của hệ thống. Ví dụ:

				
					SELECT GETDATE() AS CurrentDateTime; 
				
			

Ứng dụng DATEADD trong SQL

  • Tính toán ngày tháng: Cho phép bạn thêm hoặc trừ ngày, tháng và năm từ một ngày cụ thể. Ví dụ: tính ngày sinh nhật trong tương lai hoặc tính thời gian trôi qua kể từ một sự kiện quan trọng.
  • Tính toán thời gian: Bạn có thể được sử dụng để thêm hoặc trừ giờ, phút, giây để tính toán thời gian dựa trên một điểm thời gian khác.
  • Tạo chuỗi ngày tháng: Bạn có thể tạo chuỗi ngày tháng bằng cách kết hợp các thành phần của ngày, tháng và năm từ các cột riêng biệt trong cơ sở dữ liệu.
  • Xử lý hạn chế thời gian: DATEADD có thể được sử dụng để tính toán ngày đến hạn hoặc thời gian còn lại từ một ngày bắt đầu và một số đơn vị thời gian nhất định.

Kết luận

Trên đây là một cái nhìn tổng quan về DATEADD trong SQL. Hàm này đóng vai trò quan trọng trong việc xử lý ngày tháng trong SQL Server và cung cấp cho chúng ta khả năng thêm hoặc trừ các đơn vị thời gian từ một ngày hoặc giá trị thời gian cụ thể.

Qua các ví dụ và ứng dụng, chúng ta đã thấy cách sử dụng DATEADD để tính toán tuổi, tính thời gian, tính đến hạn và nhiều hơn nữa. Sử dụng DATEADD giúp chúng ta thực hiện các phép tính và xử lý ngày tháng một cách linh hoạt và tiện lợi trong truy vấn SQL.

Đọc thêm:
  • Hàm DATEADD (Transact-SQL) - Microsoft Learn (Tiếng Anh)
  • Date and time data types và functions (Transact-SQL) - Microsoft Learn (Tiếng Anh)