DATEADD (Transact-SQL) – Máy chủ SQL – dateadd dd 1 getdate

Tham chiếu Transact-SQL cho hàm DATEADD. Hàm này trả về một ngày đã được sửa đổi bởi phần ngày đã chỉ định.

Bạn đang xem : dateadd dd 1 getdate

Trong bài viết này

Áp dụng cho: SQL Server (tất cả các phiên bản được hỗ trợ) Cơ sở dữ liệu Azure SQL Azure SQL Managed Instance Azure Synapse Analytics Hệ thống phân tích nền tảng phân tích (PDW)

Hàm này thêm một số (số nguyên có dấu) vào phần ngày của ngày nhập và trả về giá trị ngày / giờ đã sửa đổi. Ví dụ: bạn có thể sử dụng hàm này để tìm ngày cách hôm nay 7000 phút: number = 7000, datepart = phút, date = hôm nay.

Xem Hàm và kiểu dữ liệu ngày và giờ (Transact-SQL) để biết tổng quan về tất cả các chức năng và kiểu dữ liệu ngày và giờ trong Transact-SQL.

Quy ước về cú pháp Transact-SQL

Cú pháp

  DATEADD (date, number, date)
 

Lưu ý

Để xem cú pháp Transact-SQL cho SQL Server 2014 trở về trước, hãy xem Tài liệu về các phiên bản trước .

Đối số

datepart
Phần ngày mà DATEADD thêm một số số nguyên vào. Bảng này liệt kê tất cả các đối số thời gian hợp lệ.

Lưu ý

DATEADD không chấp nhận các biến tương đương do người dùng xác định cho các đối số datepart.

hẹn hò
Các từ viết tắt

năm
yy , yyyy
quý
qq , q
tháng
mm , m
dayofyear
dy , y
ngày
đ , d
tuần
wk , ww
ngày trong tuần
dw , w
giờ
h
phút
mi , n
thứ hai
ss , s
mili giây
ms
micro giây
mcs
nano giây
ns

số
Một biểu thức có thể phân giải thành int DATEADD thêm vào khoảng thời gian của ngày. DATEADD chấp nhận các giá trị biến do người dùng xác định cho số. DATEADD sẽ cắt bớt một giá trị số đã chỉ định có phân số thập phân. Nó sẽ không làm tròn giá trị số trong trường hợp này.

ngày
Một biểu thức có thể phân giải thành một trong các giá trị sau:

  • ngày
  • ngày giờ
  • datetimeoffset
  • datetime2
  • smalldatetime
  • thời gian

Đối với ngày, DATEADD sẽ chấp nhận biểu thức cột, biểu thức, chuỗi ký tự hoặc biến do người dùng xác định. Giá trị ký tự của chuỗi phải giải quyết thành ngày giờ . Sử dụng năm bốn chữ số để tránh các vấn đề không rõ ràng. Xem Định cấu hình Tùy chọn cấu hình máy chủ giới hạn năm hai chữ số để biết thông tin về các năm có hai chữ số.

Loại trả lại

Kiểu dữ liệu giá trị trả về cho phương pháp này là động. Kiểu trả về phụ thuộc vào đối số được cung cấp cho date . Nếu giá trị cho date là một chuỗi ngày theo nghĩa đen, thì DATEADD trả về giá trị datetime . Nếu một kiểu dữ liệu đầu vào hợp lệ khác được cung cấp cho date , thì DATEADD trả về cùng một kiểu dữ liệu. DATEADD phát sinh lỗi nếu tỷ lệ giây theo nghĩa đen của chuỗi vượt quá ba vị trí thập phân (.nnn) hoặc nếu chuỗi ký tự chứa phần bù múi giờ.

Giá trị trả lại

ngày thường , ngày ngày thường trả về cùng một giá trị.

Mỗi ngày và các chữ viết tắt của nó trả về cùng một giá trị.

Nếu những điều sau là đúng:

  • ngày tháng là tháng
  • tháng ngày có nhiều ngày hơn tháng trở lại
  • ngày tháng không tồn tại trong tháng trở lại
Xem Thêm  Python cho các vòng lặp - cho các vòng lặp và danh sách python

Sau đó, DATEADD trả về ngày cuối cùng của tháng trả hàng. Ví dụ, tháng 9 có 30 (ba mươi) ngày; do đó, các câu lệnh này trả về 2006-09-30 00: 00: 00.000:

 CHỌN DATEADD (tháng, 1, '20060830');
CHỌN DATEADD (tháng, 1, '2006-08-31');
 

number Đối số

Đối số số không được vượt quá phạm vi int . Trong các câu lệnh sau, đối số cho number vượt quá phạm vi int 1. Các câu lệnh này đều trả về thông báo lỗi sau: “ Msg 8115, Level 16, State 2, Line 1. Arithmetic lỗi tràn khi chuyển đổi biểu thức thành kiểu dữ liệu int. "

  CHỌN DATEADD (năm, 2147483648, '20060731');
CHỌN DATEADD (năm, -2147483649, '20060731');
 

DATEADD sẽ không chấp nhận đối số ngày được tăng lên thành giá trị nằm ngoài phạm vi của kiểu dữ liệu của nó. Trong các câu lệnh sau, giá trị số được thêm vào giá trị ngày vượt quá phạm vi của kiểu dữ liệu ngày. DATEADD trả về thông báo lỗi sau: “ Msg 517, Mức 16, Trạng thái 1, Dòng 1 Việc thêm giá trị vào cột 'datetime' gây ra tràn .”

  CHỌN DATEADD (năm, 2147483647, '20060731');
CHỌN DATEADD (năm, -2147483647, '20060731');
 

Phần giây của giá trị smalldatetime luôn là 00. Đối với giá trị ngày smalldatetime , điều sau áp dụng:

  • Đối với ngày tháng là giây và giá trị số từ -30 đến +29, DATEADD không thực hiện thay đổi nào.
  • Đối với phần ngày là giây và giá trị số nhỏ hơn -30 hoặc hơn +29, DATEADD thực hiện phép cộng bắt đầu từ một phút.
  • Đối với phần ngày là mili giây và giá trị số từ -30001 đến +29998, DATEADD không thực hiện thay đổi nào.
  • Đối với phần ngày là mili giây và giá trị số nhỏ hơn -30001 hoặc hơn +29998, DATEADD thực hiện phép cộng bắt đầu từ một phút.

Nhận xét

Sử dụng DATEADD trong các mệnh đề sau:

  • NHÓM THEO
  • ĐẶT HÀNG THEO
  • CHỌN & lt; danh sách & gt;
  • WHERE

Độ chính xác phân số giây

DATEADD không cho phép thêm phần ngày là micro giây hoặc nano giây cho các loại dữ liệu ngày smalldatetime , < strong> date và datetime .

Mili giây có thang đo 3 (.123), micro giây có thang đo 6 (.123456) và nano giây có thang đo 9 (.123456789). Loại dữ liệu time , datetime2 datetimeoffset có tỷ lệ tối đa là 7 (.1234567). Đối với phần ngày là nano giây , con số phải là 100 trước khi số giây tăng theo phân số của ngày. Một số từ 1 đến 49 sẽ làm tròn xuống 0 và một số từ 50 đến 99 làm tròn lên 100.

Các câu lệnh này thêm phần ngày là mili giây , micro giây hoặc nano giây .

  DECLARE @ datetime2 datetime2 = '2007-01-01 13: 10: 10.1111111';
CHỌN '1 mili giây', DATEADD (mili giây, 1, @ datetime2)
ĐOÀN KẾT TẤT CẢ
CHỌN '2 mili giây', DATEADD (mili giây, 2, @ datetime2)
ĐOÀN KẾT TẤT CẢ
CHỌN '1 micro giây', DATEADD (micro giây, 1, @ datetime2)
ĐOÀN KẾT TẤT CẢ
CHỌN '2 micro giây', DATEADD (micro giây, 2, @ datetime2)
ĐOÀN KẾT TẤT CẢ
CHỌN '49 nano giây', DATEADD (nano giây, 49, @ datetime2)
ĐOÀN KẾT TẤT CẢ
CHỌN '50 nano giây ', DATEADD (nano giây, 50, @ datetime2)
ĐOÀN KẾT TẤT CẢ
CHỌN '150 nano giây', DATEADD (nano giây, 150, @ datetime2);
 

Đây là tập hợp kết quả.

  1 mili giây 2007-01-01 13: 10: 10.1121111
2 mili giây 2007-01-01 13: 10: 10.1131111
1 micro giây 2007-01-01 13: 10: 10.1111121
2 micro giây 2007-01-01 13: 10: 10.1111131
49 nano giây 2007-01-01 13: 10: 10.1111111
50 nano giây 2007-01-01 13: 10: 10.1111112
150 nano giây 2007-01-01 13: 10: 10.1111113
 

Độ lệch múi giờ

DATEADD không cho phép bổ sung độ lệch múi giờ.

Ví dụ

Mỗi câu lệnh trong số này tăng thời gian ngày một khoảng bằng 1:

 DECLARE @ datetime2 datetime2 = '2007-01-01 13: 10: 10.1111111';
CHỌN 'năm', DATEADD (năm, 1, @ datetime2)
ĐOÀN KẾT TẤT CẢ
CHỌN 'quý', DATEADD (quý, 1, @ datetime2)
ĐOÀN KẾT TẤT CẢ
CHỌN 'tháng', DATEADD (tháng, 1, @ datetime2)
ĐOÀN KẾT TẤT CẢ
CHỌN 'dayofyear', DATEADD (dayofyear, 1, @ datetime2)
ĐOÀN KẾT TẤT CẢ
CHỌN 'ngày', DATEADD (ngày, 1, @ datetime2)
ĐOÀN KẾT TẤT CẢ
CHỌN 'tuần', DATEADD (tuần, 1, @ datetime2)
ĐOÀN KẾT TẤT CẢ
CHỌN 'ngày trong tuần', DATEADD (ngày trong tuần, 1, @ datetime2)
ĐOÀN KẾT TẤT CẢ
CHỌN 'giờ', DATEADD (giờ, 1, @ datetime2)
ĐOÀN KẾT TẤT CẢ
CHỌN 'phút', DATEADD (phút, 1, @ datetime2)
ĐOÀN KẾT TẤT CẢ
CHỌN 'thứ hai', DATEADD (thứ hai, 1, @ datetime2)
ĐOÀN KẾT TẤT CẢ
CHỌN 'mili giây', DATEADD (mili giây, 1, @ datetime2)
ĐOÀN KẾT TẤT CẢ
CHỌN 'micro giây', DATEADD (micro giây, 1, @ datetime2)
ĐOÀN KẾT TẤT CẢ
CHỌN 'nano giây', DATEADD (nano giây, 1, @ datetime2);
 

Đây là tập hợp kết quả.

  Năm 2008-01-01 13: 10: 10.1111111
quý 2007-04-01 13: 10: 10.1111111
tháng 2007-02-01 13: 10: 10.1111111
dayofyear 2007-01-02 13: 10: 10.1111111
ngày 2007-01-02 13: 10: 10.1111111
tuần 2007-01-08 13: 10: 10.1111111
ngày trong tuần 2007-01-02 13: 10: 10.1111111
giờ 2007-01-01 14: 10: 10.1111111
phút 2007-01-01 13: 11: 10.1111111
thứ hai 2007-01-01 13: 10: 11.1111111
mili giây 2007-01-01 13: 10: 10.1121111
micro giây 2007-01-01 13: 10: 10.1111121
nanosecond 2007-01-01 13: 10: 10.1111111
 

Mỗi câu lệnh trong số này làm tăng thời gian ngày một số đủ lớn để tăng thêm thời điểm ngày tiếp theo cao hơn:

  DECLARE @ datetime2 datetime2;
SET @ datetime2 = '2007-01-01 01: 01: 01.1111111';
- Kết quả câu lệnh
-------------------------------------------------- -----------------
CHỌN DATEADD (quý, 4, @ datetime2); --2008-01-01 01: 01: 01.1111111
CHỌN DATEADD (tháng, 13, @ datetime2); --2008-02-01 01: 01: 01.1111111
CHỌN DATEADD (dayofyear, 365, @ datetime2); --2008-01-01 01: 01: 01.1111111
CHỌN DATEADD (ngày, 365, @ datetime2); --2008-01-01 01: 01: 01.1111111
CHỌN DATEADD (tuần, 5, @ datetime2); --2007-02-05 01: 01: 01.1111111
CHỌN DATEADD (ngày trong tuần, 31, @ datetime2); --2007-02-01 01: 01: 01.1111111
CHỌN DATEADD (giờ, 23, @ datetime2); --2007-01-02 00: 01: 01.1111111
CHỌN DATEADD (phút, 59, @ datetime2); --2007-01-01 02: 00: 01.1111111
CHỌN DATEADD (giây, 59, @ datetime2); --2007-01-01 01: 02: 00.1111111
CHỌN DATEADD (mili giây, 1, @ datetime2); --2007-01-01 01: 01: 01.1121111
 

Những ví dụ này sử dụng các loại biểu thức khác nhau làm đối số cho các tham số số và ngày. Các ví dụ sử dụng cơ sở dữ liệu AdventureWorks.

Ví dụ này thêm 2 (hai) ngày vào mỗi giá trị trong cột OrderDate , để lấy một cột mới có tên PromisedShipDate :

  CHỌN ID Đơn vị bán hàng
    ,Ngày đặt hàng
    , DATEADD (ngày, 2, OrderDate) AS PromisedShipDate
TỪ Sales.SalesOrderHeader;
 

Một phần kết quả tập hợp:

  SalesOrderID OrderDate PromisedShipDate
------------------------------- --------------- --------
43659 2005-07-01 00: 00: 00.000 2005-07-03 00: 00: 00.000
43660 2005-07-01 00: 00: 00.000 2005-07-03 00: 00: 00.000
43661 2005-07-01 00: 00: 00.000 2005-07-03 00: 00: 00.000
...
43702 2005-07-02 00: 00: 00.000 2005-07-04 00: 00: 00.000
43703 2005-07-02 00: 00: 00.000 2005-07-04 00: 00: 00.000
43704 2005-07-02 00: 00: 00.000 2005-07-04 00: 00: 00.000
43705 2005-07-02 00: 00: 00.000 2005-07-04 00: 00: 00.000
43706 2005-07-03 00: 00: 00.000 2005-07-05 00: 00: 00.000
...
43711 2005-07-04 00: 00: 00.000 2005-07-06 00: 00: 00.000
43712 2005-07-04 00: 00: 00.000 2005-07-06 00: 00: 00.000
...
43740 2005-07-11 00: 00: 00.000 2005-07-13 00: 00: 00.000
43741 2005-07-12 00: 00: 00.000 2005-07-14 00: 00: 00.000
  
 

Ví dụ này chỉ định các biến do người dùng xác định làm đối số cho số và ngày:

  DECLARE @days INT = 365,
        @datetime DATETIME = '2000-01-01 01: 01: 01.111'; / * 2000 là một năm nhuận * /;
CHỌN DATEADD (ngày, @days, @datetime);
 

Đây là tập hợp kết quả.

  -----------------------
2000-12-31 01: 01: 01.110
  
(1 hàng bị ảnh hưởng)
 

Ví dụ này chỉ định SYSDATETIME cho ngày tháng. Giá trị chính xác được trả về phụ thuộc vào
ngày và giờ thực hiện tuyên bố:

  CHỌN DATEADD (tháng, 1, SYSDATETIME ());
 

Đây là tập hợp kết quả.

  ---------------------------
2013-02-06 14: 29: 59.6727944
  
(1 hàng bị ảnh hưởng)
 

Ví dụ này sử dụng truy vấn con vô hướng, MAX (ModifiedDate) , làm đối số cho số và ngày. (CHỌN TOP 1 BusinessEntityID TỪ Person.Person) đóng vai trò là đối số nhân tạo cho tham số số, để chỉ ra cách chọn đối số số từ danh sách giá trị.

  CHỌN NGÀYADD (tháng, (CHỌN TOP 1 BusinessEntityID TỪ Person.Person),
    (CHỌN TỐI ĐA (Ngày sửa đổi) TỪ Người. Người));
 

Ví dụ này sử dụng biểu thức số (- (10/2)) , toán tử một bậc ( - ), số học toán tử ( / ) và các hàm hệ thống vô hướng ( SYSDATETIME ) làm đối số cho số và ngày.

  CHỌN DATEADD (tháng, - (10/2), SYSDATETIME ());
 

Chỉ định các chức năng xếp hạng là số

Ví dụ này sử dụng hàm xếp hạng làm đối số cho số.

  CHỌN p.FirstName, p.LastName
    , DATEADD (ngày, ROW_NUMBER () HẾT (ĐẶT HÀNG THEO
        a.PostalCode), SYSDATETIME ()) AS 'Số hàng'
TỪ Sales.SalesPerson AS s
    NGƯỜI THAM GIA INNER. NGƯỜI NHƯ p
        ON s.BusinessEntityID = p.BusinessEntityID
    THAM GIA INNER Person.Địa chỉ NHƯ a
        ON a.AddressID = p.BusinessEntityID
NƠI TerritoryID KHÔNG ĐẦY ĐỦ
    VÀ SalesYTD & lt; & gt; 0;
 

Chỉ định một hàm cửa sổ tổng hợp là số

Ví dụ này sử dụng hàm cửa sổ tổng hợp làm đối số cho số.

  CHỌN SalesOrderID, ProductID, OrderQty
    , DATEADD (ngày, SUM (OrderQty)
        HẾT (PHẦN BỞI SalesOrderID), SYSDATETIME ()) NHƯ 'Tổng cộng'
TỪ Sales.SalesOrderDetail
SalesOrderID Ở ĐÂU (43659,43664);
ĐI
 

Xem thêm

ĐÚC và CHUYỂN ĐỔI (Giao dịch-SQL)


Xem thêm những thông tin liên quan đến chủ đề dateadd dd 1 getdate

58. DATEADD Function in SQL Server

  • Tác giả: Databoard Analytics
  • Ngày đăng: 2020-07-18
  • Đánh giá: 4 ⭐ ( 7392 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Use The DATEADD Function to Add or subtract a specified time interval from a date.

DATEADD SQL function introduction and overview

  • Tác giả: www.sqlshack.com
  • Đánh giá: 3 ⭐ ( 6834 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: This article explores the DATEADD SQL function and its usage scenarios with various examples.

SELECT DATEADD(day, -1, getdate()) .. how to get just day without time …. and remove the formatting as well .. look below …

  • Tác giả: social.msdn.microsoft.com
  • Đánh giá: 4 ⭐ ( 7086 lượt đánh giá )
  • Khớp với kết quả tìm kiếm:

What is different between DATEADD(DAY, 1, GETDATE()) and DATEADD(DAY, 1, DATEDIFF(DAY, 0, GETDATE()))

  • Tác giả: stackoverflow.com
  • Đánh giá: 5 ⭐ ( 1394 lượt đánh giá )
  • Khớp với kết quả tìm kiếm:

DATEADD(DAY, -30, GETDATE()) – SQLServerCentral Forums

  • Tác giả: www.sqlservercentral.com
  • Đánh giá: 4 ⭐ ( 3060 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: DATEADD(DAY, -30, GETDATE()) Forum – Learn more on SQLServerCentral

DATEADD() Examples in SQL Server

  • Tác giả: database.guide
  • Đánh giá: 4 ⭐ ( 8998 lượt đánh giá )
  • Khớp với kết quả tìm kiếm:

SQL Server DATEADD() Function

  • Tác giả: www.w3schools.com
  • Đánh giá: 3 ⭐ ( 6266 lượt đánh giá )
  • Khớp với kết quả tìm kiếm:

Xem thêm các bài viết khác thuộc chuyên mục: Kiến thức lập trình

Xem Thêm  Free Game Engines (Game Programming Libraries)(thefreecountry.com) - game source code