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áo
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
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 |
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
Tăng số thập phân hoặc ảnh
Giả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ình và Thờ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 Chung và Thờ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ư |
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.
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.
Xem thêm
Giới thiệu các kiểu dữ liệu và thuộc tính trường