Sử dụng kiểu dữ liệu Mở rộng Ngày/Thời gian

Áp dụng cho
Access cho Microsoft 365 Access 2024 Access 2021

Kiểu dữ liệu Ngày/Giờ Mở rộng lưu trữ thông tin ngày và thời gian và tương tự với kiểu dữ liệu Ngày/Giờ nhưng cung cấp phạm vi ngày lớn hơn, độ chính xác phân số cao hơn và tính tương thích với kiểu ngày DateTime2 của SQL Server. Khi bạn nhập hoặc liên kết dữ liệu Access với SQL Server, bạn có thể ánh xạ một cách nhất quán trường Ngày/Thời gian Access được Mở rộng với cột datetime2 của SQL Server. Để biết thêm thông tin, hãy xem datetime2 (Transact-SQL).

Cảnh báoPhạm vi mở rộng Ngày/Giờ Khi bạn tạo biểu thức và sử dụng hàm ngày/giờ dựa trên kiểu dữ liệu Ngày/Giờ Mở rộng trong Access, bạn có thể mất độ chính xác trong tính toán hoặc gặp các vấn đề khác với kết quả. Chúng tôi đã biết về sự cố này và dự định hỗ trợ tốt hơn cho biểu thức và hàm trong bản phát hành sắp tới. Bạn có thể Tạo truy vấn chuyển qua để sử dụng biểu thức SQL Server và các hàm ngày/giờ tương đương. Để biết thêm thông tin, hãy xem So sánh Access SQL với SQL Server TSQL.

Trong bài viết này

So sánh kiểu dữ liệu Ngày/Giờ và Ngày/Giờ Mở rộng Sử dụng kiểu dữ liệu Mở rộng Ngày/Thời gian Những điều cần cân nhắc về tính tương thích ngược Dùng kiểu dữ liệu Ngày/Giờ Mở rộng dưới dạng chuỗi trong VBA

So sánh kiểu dữ liệu Ngày/Giờ và Ngày/Giờ Mở rộng

Bảng sau đây tóm tắt những điểm khác biệt quan trọng giữa hai kiểu dữ liệu.

Thuộc tính Ngày/Giờ Đã mở rộng Ngày/Giờ
Giá trị Tối thiểu 100-01-01 00:00:00 0001-01-01 00:00:00
Giá trị Tối đa 9999-12-31 23:59:59.999 9999-12-31 23:59:59.9999999
Độ chính xác 0,001 giây 1 nano giây
Size Dấu phẩy động có độ chính xác kép Chuỗi mã hóa gồm 42 byte

Đầu Trang

Sử dụng kiểu dữ liệu Mở rộng Ngày/Thời gian

Thông tin sau đây mô tả những điều cần cân nhắc quan trọng khi sử dụng.

Dạng xem Thiết kế của Bảng Để tận dụng lợi thế của phạm vi dữ liệu lớn hơn và độ chính xác cao hơn, bạn có thể thêm trường vào bảng Access. Bạn cũng có thể chuyển đổi kiểu dữ liệu Ngày/Giờ thành Ngày/Giờ Mở rộng trong dạng xem Thiết kế Bảng. Ngoài ra có hỗ trợ sử dụng kiểu dữ liệu này làm trường khóa chính. Để biết thêm thông tin, hãy xem Tạo bảng và thêm trường.

Nhập ngày và giờ Việc nhập các giá trị ngày và giờ tương tự như kiểu dữ liệu Ngày/Giờ, ngoại trừ việc bạn cũng có thể nhập một nano giây phân số. Ví dụ:

  • Định dạng mục nhập: mm/dd/yyyy hh:mm:ss.nnnnnnn
  • Ví dụ: 06/15/1215 09:25:3.234

Nếu có nhiều hơn 7 nano giây phân số, chúng được làm tròn thành 7 chữ số. Để kiểm soát hiển thị nano giây phân số, hãy mở Bảng, trên ruy-băng chọn Trường và trong nhóm Định dạng, chọn ảnh nútTăng số thập phân hoặc ảnh nútGiảm số thập phân.

Định dạng Cả hai kiểu dữ liệu Ngày/Giờ và Ngày/Giờ Mở rộng đều sử dụng các chuỗi định dạng chuẩn tương tự như Ngày Chung, Ngày Dài, Ngày Trung bình, Ngày Ngắn, Thời gian Dài, Thời gian Trung bìnhThời gian Ngắn và Cả hai đều hỗ trợ định dạng tùy chỉnh. Đối với kiểu dữ liệu Ngày/Giờ Mở rộng, định dạng chuẩn dựa trên thời gian cũng hỗ trợ độ chính xác phân số cho nanogiây. Định dạng của kiểu dữ liệu Ngày/Giờ Mở rộng mặc định là định dạng Ngày ChungThời gian Dài và tuân theo các tùy chọn được chỉ định trong cài đặt vùng Windows. Bạn cũng có thể kiểm soát định dạng độ chính xác phân số bằng thuộc tính Decimal Places để chỉ định số chữ số ở bên phải dấu thập phân (1-7).

Liên kết và nhập Bạn cũng có thể liên kết đến hoặc nhập từ cơ sở dữ liệu có kiểu dữ liệu tương ứng, chẳng hạn như kiểu dữ liệu SQL Server datetime2. Cơ sở dữ liệu SQL Server phiên bản 2014 trở lên được hỗ trợ. Kiểu dữ liệu Ngày/Giờ Mở rộng yêu cầu sử dụng Trình điều khiển Microsoft ODBC cho SQL Server 11 trở lên. Chúng tôi khuyên bạn nên sử dụng Trình điều khiển Microsoft ODBC 13.1 cho SQL Server. Việc sử dụng OLE DB cũng được hỗ trợ. Để biết thêm thông tin, xem Hỗ trợ kiểu dữ liệu cho các cải tiến về ngày và giờ ODBC và Sử dụng Tính năng Ngày và Giờ Nâng cao (OLE DB).

Biểu mẫu và báo cáo Bạn có thể thêm kiểu dữ liệu Ngày/Thời gian Mở rộng vào một biểu mẫu hoặc báo cáo. Trong một biểu mẫu, bạn có thể sử dụng bộ chọn ngày tháng và dấu hiệu nhập để nhập ngày có phạm vi lớn hơn nhưng không phải độ chính xác phân số cho nanogiây.

Hỗ trợ biểu thức Kiểu dữ liệu Ngày/Giờ Mở rộng hỗ trợ các Hàm Tổng hợp SQL và đánh giá biểu thức. Ví dụ: sử dụng LoggedDateTime làm trường có kiểu dữ liệu Ngày/Giờ Mở rộng:

Tác vụ Ví dụ Kết quả
Tìm giá trị nhỏ nhất Min(LoggedDateTime) Ngày và giờ sớm nhất trong phạm vi
Trích xuất tháng Month(LoggedDateTime) Tên tháng, chẳng hạn như January
Thêm một ngày [LoggedDateTime]+1 Thứ Ba sẽ trở thành Thứ Tư

Đầu Trang

Những điều cần cân nhắc về Tính tương thích Ngược

Kiểu dữ liệu Mở rộng Ngày/Giờ không tương thích với các phiên bản Microsoft Access trước đây. Nếu kiểu được sử dụng trong bảng Access cục bộ, các phiên bản Access không tích hợp tính năng này sẽ không thể mở cơ sở dữ liệu.

Bạn có thể bật hoặc tắt kiểu dữ liệu Ngày/Giờ Mở rộng cho các thao tác liên kết và nhập với tùy chọn Cơ sở dữ liệu Hiện tại Access Hỗ trợ Kiểu Dữ liệu Mở rộng Ngày/Giờ cho các bảng được liên kết/chuyển đổi. Để biết thêm thông tin, hãy xem mục Đặt tùy chọn người dùng cho cơ sở dữ liệu hiện tại.

Đầu Trang

Dùng kiểu dữ liệu Ngày/Giờ Mở rộng dưới dạng chuỗi trong VBA

Các ví dụ về VBA sau đây sử dụng phương pháp DAO để hiển thị, nhập và đánh giá kiểu dữ liệu Ngày/Giờ Mở rộng dựa trên bảng dưới đây.

ID DTEData DTData
1 01/1/2 1:01:03.1234567 SA 01/01/2001

Tên bảng: Có thể dùng DTETable
Loại dữ liệu ID: Số tự động
Kiểu dữ liệu DTEData: Đã mở rộng Ngày/Giờ
Kiểu dữ liệu DTData: Ngày/Giờ

Ví dụ: Hiển thị ngày và giờ

Ví dụ sau đây hiển thị ngày và giờ. Định dạng được sử dụng là mm/dd/yyyy hh:mm:ss.nnnnnnn trong định dạng 24 giờ. Định dạng này không thể tùy chỉnh.


Dim db As Database
Dim rs As Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("DTETable")
Do Until rs.EOF
    Debug.Print rs!DTETable
    rs.MoveNext
Loop

Kết quả Access hiển thị: 01/01/0002 01:01:03.1234567.

Ví dụ: Nhập ngày và giờ

Ví dụ sau đây nhập ngày và giờ bằng cách dùng định dạng chuỗi. Tất cả các định dạng ngày và giờ tiêu chuẩn đều được hỗ trợ.


Dim db As Database
Dim rs As Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("DTETable")
With CurrentDb.OpenRecordset("DTETable")
    .AddNew
    ![DTEData] = "1/1/9999 1:1:1.0123 AM"
    ![DTData] = #1/1/2001#
    .Update
End With

Kết quả Access sẽ thêm một hàng mới (ID = 2):

ID DTEData DTData
1 01/1/2 1:01:03.1234567 SA 01/01/2001
2 01/01/9999 1:01:01.0123000 SA 01/01/2001

Ví dụ: Đánh giá biểu thức truy vấn

Ví dụ sau đây sử dụng hàm Day để trích xuất số ngày từ các trường ngày và giờ.


Dim db As Database
Dim rs As Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("SELECT Day(DTEData) as day FROM DTETable")
Do Until rs.EOF
    Debug.Print "The day of the month is: "&rs!day
    rs.MoveNext
Loop

Kết quả Access hiển thị:

Ngày của tháng là: 1
Ngày của tháng là: 1

Các hàm làm việc với Ngày/Giờ Mở rộng trong biểu thức truy vấn

Các hàm sau đây hoạt động với Ngày/Thời gian Mở rộng trong biểu thức truy vấn:
​​​​​​​
Year, Month, Weekday, Day, Hour, Minute, Second, DateAdd, DateDiff và DatePart.

Ngoài ra, có các phiên bản Mở rộng của một số hàm không thể sử dụng kiểu đối số để xác định rằng phép tính sẽ tạo ra giá trị Mở rộng Ngày/Giờ. Đó là:

DateValueExtended, TimeValueExtended, DateSerialExtended, TimeSerialExtended, NowExtended, DateExtended, DateTimeExtended và TimeExtended.

Những hàm này hoạt động giống như hàm không có "Extended" ở cuối, nhưng trả về giá trị Ngày/Giờ Mở rộng chứ không phải giá trị Ngày/Giờ.

Lưu ý rằng VBA chưa được sửa đổi, các hàm mới sẽ không được nhận dạng trong mã VBA và các hàm hiện tại sẽ không hoạt động với các giá trị Ngày/Mở rộng Thời gian.

Ví dụ

Truy vấn gốc:


Select DateValue([OrderDate]) AS OrderDateOnly_DateValue

, Format([OrderDate],"Short Date") AS OrderDateOnly_Format

From tblOrders

Bây giờ, thay đổi DateValue([Ngày_đặt_hàng]) thành DateValueExtended([Ngày_đặt_hàng]), thao tác này sẽ sửa biểu thức đầu tiên.

Lưu ý rằng Access không xử lý hàm Định dạng cho các cột mở rộng Ngày/Thời gian; bạn có thể chỉ cần đặt thuộc tính Định dạng cho cột.

Do đó, nếu bạn sử dụng:


SELECT DateValueExtended([OrderDate]) AS OrderDateOnly_DateValue, Table1.OrderDate

FROM Table1;

Và đặt thuộc tính Định dạng cho cột thứ hai thành "Ngày Ngắn", bạn sẽ nhận được kết quả mong muốn.

Đầu Trang

Xem thêm

Giới thiệu các kiểu dữ liệu và thuộc tính trường

Định dạng trường ngày và thời gian

Tạo hoặc xóa trường ngày và thời gian