Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

DATEADD () Ví dụ trong SQL Server

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách chèn dữ liệu Excel hoặc CSV vào Bảng bằng cách sử dụng Giao diện người dùng đồ họa trong SQL Server - Hướng dẫn sử dụng SQL Server / TSQL Phần 102

  2. Cách thiết lập đám mây Spotlight và khắc phục sự cố máy chủ SQL một cách hiệu quả

  3. Chương trình dòng lệnh hoặc tập lệnh đơn giản để sao lưu cơ sở dữ liệu máy chủ SQL là gì?

  4. Thuật toán để tránh SQL injection trên MSSQL Server từ mã C #?

  5. 2 cách tạo bảng nếu nó không tồn tại trong SQL Server