Trong SQL Server, bạn có thể sử dụng DATEADD()
chức năng thêm một khoảng thời gian cụ thể vào một ngày nhất định. Bạn cũng có thể sử dụng nó để trừ một khoảng thời gian cụ thể.
Bạn cũng có thể kết hợp DATEADD()
cùng các chức năng khác để định dạng ngày tháng theo yêu cầu. Ví dụ:bạn có thể lấy '2020-10-03', thêm 10 năm, sau đó trả về thành phần năm (đã tăng lên).
Bài viết này có các ví dụ để minh chứng.
Cú pháp
Cú pháp của DATEADD()
như sau:
DATEADD (datepart , number , date )
Nơi datepart
là phần của ngày bạn muốn tăng (hoặc giảm), number
là số tiền để tăng datepart
trước, và date
là ngày mà việc bổ sung sẽ diễn ra.
Ví dụ 1
Dưới đây là một ví dụ cơ bản về việc thêm mười năm vào một ngày:
SELECT DATEADD(year, 10, '2020-10-03') AS 'Future Date';
Kết quả:
+-------------------------+ | Future Date | |-------------------------| | 2030-10-03 00:00:00.000 | +-------------------------+
Trong trường hợp này, giá trị trả về bao gồm thành phần thời gian cũng như ngày tháng. Điều này là do kết quả được trả về dưới dạng ngày giờ giá trị. Lý do nó được trả về dưới dạng kiểu dữ liệu này là vì chúng tôi đã cung cấp một chuỗi ký tự là date
lý lẽ. Khi bạn cung cấp một chuỗi ký tự là ngày, DATEADD()
trả về ngày giờ giá trị.
Trong trường hợp bạn không cung cấp một chuỗi ký tự, giá trị trả về giống với kiểu dữ liệu của date
lý lẽ. Ví dụ:nếu bạn cung cấp datetime2 đối số, giá trị trả về sẽ là datetime2 .
Ví dụ 2 - Định dạng Kết quả
Chúng ta có thể lấy kết quả trên và định dạng nó bằng FORMAT()
chức năng:
SELECT FORMAT(DATEADD(year, 10, '2020-10-03'), 'yyyy-MM-dd') AS 'yyyy-MM-dd', FORMAT(DATEADD(year, 10, '2020-10-03'), 'dd/MM/yyyy') AS 'dd/MM/yyyy', FORMAT(DATEADD(year, 10, '2020-10-03'), 'yyyy') AS 'yyyy', FORMAT(DATEADD(year, 10, '2020-10-03'), 'yy') AS 'yy';
Kết quả:
+--------------+--------------+--------+------+ | yyyy-MM-dd | dd/MM/yyyy | yyyy | yy | |--------------+--------------+--------+------| | 2030-10-03 | 03/10/2030 | 2030 | 30 | +--------------+--------------+--------+------+
Nhưng điều quan trọng cần lưu ý là FORMAT()
hàm trả về kết quả của nó dưới dạng một chuỗi.
Một tùy chọn khác là sử dụng CONVERT()
để chuyển đổi kết quả thành ngày kiểu dữ liệu:
SELECT CONVERT(date, DATEADD(year, 10, '2020-10-03')) AS Converted;
Kết quả:
+-------------+ | Converted | |-------------| | 2030-10-03 | +-------------+
Hoặc bạn có thể sử dụng một hàm như YEAR()
, trả về kết quả dưới dạng số nguyên:
SELECT YEAR(DATEADD(year, 10, '2020-10-03')) AS 'Future Year';
Kết quả:
+---------------+ | Future Year | |---------------| | 2030 | +---------------+
Ví dụ 3 - Trừ ngày
Bạn có thể sử dụng số âm để trừ ngày:
SELECT DATEADD(year, -10, '2020-10-03') AS 'Earlier Date';
Kết quả:
+-------------------------+ | Earlier Date | |-------------------------| | 2010-10-03 00:00:00.000 | +-------------------------+
Và tất nhiên, bạn có thể định dạng tệp này bằng bất kỳ phương pháp nào đã đề cập trước đó.
Ví dụ 4 - Ngày hệ thống
Dưới đây là một số ví dụ về việc sử dụng các hàm khác nhau để trả về ngày / giờ hiện tại từ máy tính đang chạy phiên bản SQL Server.
SYSDATETIME ()
SELECT SYSDATETIME() AS 'Current Date', DATEADD(year, 10, SYSDATETIME()) AS 'Future Date';
Kết quả:
+-----------------------------+-----------------------------+ | Current Date | Future Date | |-----------------------------+-----------------------------| | 2018-06-04 05:57:51.7297042 | 2028-06-04 05:57:51.7297042 | +-----------------------------+-----------------------------+
SYSDATETIMEOFFSET ()
SELECT SYSDATETIME() AS 'Current Date', DATEADD(year, 10, SYSDATETIME()) AS 'Future Date';
Kết quả:
+--------------------------+--------------------------+ | Current Date | Future Date | |--------------------------+--------------------------| | 4/6/18 6:02:07 am +00:00 | 4/6/28 6:02:07 am +00:00 | +--------------------------+--------------------------+
Như đã đề cập, các kết quả này được trả về bằng kiểu dữ liệu của date
đối số (vì chúng không phải là chuỗi ký tự).
Định dạng đầu ra
SELECT YEAR(SYSDATETIME()) AS 'Current Year', YEAR(DATEADD(year, 10, SYSDATETIME())) AS 'Future Year';
Kết quả:
+----------------+---------------+ | Current Year | Future Year | |----------------+---------------| | 2018 | 2028 | +----------------+---------------+
Và như cũng đã đề cập, nếu bạn định dạng ngày, nó sẽ được trả về kiểu dữ liệu cho hàm áp dụng. Vì vậy, trong ví dụ này, kết quả được trả về dưới dạng int . Nếu chúng tôi định dạng nó bằng FORMAT()
, nó sẽ được trả về dưới dạng một chuỗi.