ชนิดข้อมูลวันที่/เวลาที่ขยายจะจัดเก็บข้อมูลของวันที่และเวลา และคล้ายกับชนิดข้อมูลวันที่/เวลา แต่จะระบุช่วงวันที่ที่กว้างกว่า ความแม่นยำของเศษส่วนที่สูงขึ้น และความเข้ากันได้กับชนิดข้อมูล เวลาวันที่2 ของ SQL Server เมื่อคุณนำเข้าหรือลิงก์ข้อมูล Access ไปยัง SQL Server คุณสามารถแมปเขตข้อมูลของวันที่/เวลาที่ขยายของ Access ไปยังคอลัมน์ เวลาวันที่2 ของ SQL Server ได้อย่างต่อเนื่อง สําหรับข้อมูลเพิ่มเติม ให้ดู วันที่เวลา 2 (Transact-SQL)
คําเตือน
เมื่อคุณสร้างนิพจน์และใช้ฟังก์ชันวันที่/เวลาตามชนิดข้อมูลวันที่/เวลาที่ขยายใน Access คุณอาจสูญเสียความแม่นยําในการคํานวณหรือพบปัญหาอื่นๆ เกี่ยวกับผลลัพธ์ เราทราบถึงปัญหานี้และวางแผนที่จะรองรับนิพจน์และฟังก์ชันให้ดียิ่งขึ้นในรุ่นที่กำลังมาถึง ในฐานะวิธีแก้ปัญหาชั่วคราว คุณสามารถสร้างแบบสอบถามแบบพาส-ทรูเพื่อใช้นิพจน์ SQL Server ที่เทียบเท่าและฟังก์ชันวันที่/เวลา สำหรับข้อมูลเพิ่มเติม ให้ดู การเปรียบเทียบ Access SQL กับ SQL Server TSQL
ในบทความนี้
| การเปรียบเทียบชนิดข้อมูลวันที่/เวลาและวันที่/เวลาที่ขยาย | ใช้ชนิดข้อมูลวันที่/เวลาที่ขยาย | ข้อควรพิจารณาเกี่ยวกับความเข้ากันได้กับแบบย้อนหลัง | ใช้ชนิดข้อมูลวันที่/เวลาที่ขยายเป็นสตริงใน VBA |
|---|
การเปรียบเทียบชนิดข้อมูลวันที่/เวลาและวันที่/เวลาที่ขยาย
ตารางต่อไปนี้จะสรุปความแตกต่างที่สำคัญระหว่างสองชนิดข้อมูล
| แอตทริบิวต์ | วันที่/เวลา | วันที่และเวลาที่ขยาย |
|---|---|---|
| ค่าน้อยที่สุด | 100-01-01 00:00:00 | 0001-01-01 00:00:00 |
| ค่ามากที่สุด | 9999-12-31 23:59:59.999 | 9999-12-31 23:59:59.9999999 |
| ความเที่ยงตรง | 0.001 วินาที | 1 นาโนวินาที |
| ขนาด | จุดลอยตัวความแม่นยำสองเท่า | สตริงที่เข้ารหัสของ 42 ไบต์ |
ใช้ชนิดข้อมูลวันที่/เวลาที่ขยาย
ข้อมูลต่อไปนี้จะอธิบายถึงข้อควรพิจารณาในการใช้งานที่สำคัญ
มุมมองออกแบบตาราง เมื่อต้องการใช้ประโยชน์จากช่วงข้อมูลที่มีขนาดใหญ่ขึ้นและความแม่นยําสูงขึ้น คุณสามารถเพิ่มเขตข้อมูลลงในตาราง Access ได้ นอกจากนี้ คุณยังสามารถแปลงชนิดข้อมูลวันที่/เวลาเป็นวันที่/เวลาที่ขยายในมุมมองออกแบบตารางได้อีกด้วย การใช้ชนิดข้อมูลนี้เป็นเขตข้อมูลคีย์หลักจะได้รับการรองรับอีกด้วย สำหรับข้อมูลเพิ่มเติม ให้ดู สร้างตารางและเพิ่มเขตข้อมูล
การใส่วันที่และเวลา การใส่ค่าวันที่และเวลาจะคล้ายกับชนิดข้อมูลวันที่/เวลา ยกเว้นว่าคุณยังสามารถใส่เศษส่วนนาโนวินาทีได้ ตัวอย่างเช่น:
- รูปแบบรายการ: mm/dd/yyyy hh:mm:ss.nnnnnnn
- ตัวอย่าง: 06/15/1215 09:25:3.234
หากมีเศษส่วนนาโนวินาทีมากกว่า 7 หลัก ตัวเลขจะถูกปัดเป็น 7 หลัก เมื่อต้องการควบคุมการแสดงเศษส่วนนาโนวินาที ให้เปิดตาราง บน Ribbon ให้เลือก เขตข้อมูล และในกลุ่ม การจัดรูปแบบ ให้เลือก
เพิ่มตําแหน่งทศนิยม หรือ
ลดตําแหน่งทศนิยม
จัด รูป แบบ ทั้งชนิดข้อมูลวันที่/เวลาและวันที่/เวลาที่ขยายจะใช้สตริงการจัดรูปแบบมาตรฐานที่คล้ายกันของ วันที่ทั่วไปวันที่แบบยาววันที่แบบปานกลางวันที่แบบสั้นเวลาแบบยาวเวลาแบบปานกลาง และ เวลาแบบสั้น และสนับสนุนการจัดรูปแบบแบบกําหนดเอง สำหรับชนิดข้อมูลวันที่/เวลาที่ขยาย รูปแบบมาตรฐานที่ยึดตามเวลายังรองรับความแม่นยำของเศษส่วนสำหรับนาโนวินาทีด้วย การจัดรูปแบบค่าเริ่มต้นของชนิดข้อมูลวันที่/เวลาเป็นรูปแบบ วันที่ทั่วไป และ เวลาแบบยาว และทำตามตัวเลือกที่ระบุใน การตั้งค่าภูมิภาคของ Windows นอกจากนี้ คุณยังสามารถควบคุมการจัดรูปแบบของความแม่นยำของเศษส่วนโดยใช้คุณสมบัติ ตำแหน่งทศนิยม เพื่อระบุจำนวนหลักทางด้านขวาของจุดทศนิยม (1-7) ได้
ลิงก์และนําเข้า คุณยังสามารถลิงก์หรือนําเข้าจากฐานข้อมูลที่มีชนิดข้อมูลที่สอดคล้องกัน เช่น ชนิดข้อมูล SQL Server datetime2 รองรับ SQL Server เวอร์ชัน 2014 หรือเวอร์ชันที่ใหม่กว่า ชนิดข้อมูลวันที่/เวลาที่ขยายจำเป็นต้องใช้โปรแกรมควบคุม ODBC ของ Microsoft สำหรับ SQL Server 11 หรือเวอร์ชันที่ใหม่กว่า เราขอแนะนําให้ใช้ โปรแกรมควบคุม ODBC ของ Microsoft 13.1 สําหรับ SQL Server ยังรองรับการใช้งาน OLE DB อีกด้วย สําหรับข้อมูลเพิ่มเติม ให้ดู การสนับสนุนชนิดข้อมูลสําหรับการปรับปรุงวันที่และเวลา ODBC และใช้ฟีเจอร์วันที่และเวลาที่ได้รับการปรับปรุง (OLE DB)
แบบฟอร์มและรายงาน คุณสามารถเพิ่มชนิดข้อมูลวันที่/เวลาที่ขยายลงในแบบฟอร์มหรือรายงาน ในแบบฟอร์ม คุณสามารถใช้ตัวใช้เลือกวันที่และรูปแบบการป้อนข้อมูลในการใส่วันที่ที่มีช่วงขนาดใหญ่ขึ้น แต่ไม่ใช่ความแม่นยำของเศษส่วนนาโนวินาที
การสนับสนุนนิพจน์ ชนิดข้อมูลวันที่/เวลาที่ขยายสนับสนุน ฟังก์ชันการรวม SQL และการประเมินนิพจน์ ตัวอย่างเช่น การใช้ LoggedDateTime เป็นเขตข้อมูลที่มีชนิดข้อมูลวันที่/เวลาที่ขยาย:
| งาน | ตัวอย่าง | ผลลัพธ์ |
|---|---|---|
| ค้นหาค่าน้อยที่สุด | Min(LoggedDateTime) | วันที่และเวลาที่เร็วที่สุดในช่วง |
| แยกเดือน | Month(LoggedDateTime) | ชื่อเดือน เช่น มกราคม |
| เพิ่มหนึ่งวัน | [LoggedDateTime]+1 | วันอังคารจะกลายเป็นวันพุธ |
ข้อควรพิจารณาเกี่ยวกับความเข้ากันได้กับรุ่นก่อนหน้า
ชนิดข้อมูลวันที่/เวลาที่ขยายไม่เข้ากันกับ Microsoft Access เวอร์ชันก่อนหน้า ถ้าชนิดถูกใช้ภายในตาราง Access ภายในเครื่อง Access เวอร์ชันที่ไม่มีฟีเจอร์นี้จะไม่สามารถเปิดฐานข้อมูลได้
คุณสามารถเปิดหรือปิดใช้งานชนิดข้อมูลวันที่/เวลาที่ขยายสําหรับการลิงก์และการนําเข้าการดําเนินการด้วยตัวเลือกการเข้าถึงฐานข้อมูลปัจจุบันสนับสนุนชนิดข้อมูลวันที่/เวลาที่ขยายสําหรับตารางที่ลิงก์/lmported สําหรับข้อมูลเพิ่มเติม ให้ดูที่ ตั้งค่าตัวเลือกผู้ใช้สําหรับฐานข้อมูลปัจจุบัน
ใช้ชนิดข้อมูลวันที่/เวลาที่ขยายเป็นสตริงใน VBA
ตัวอย่าง VBA ต่อไปนี้ใช้วิธีการ DAO เพื่อแสดง ใส่ และประเมินชนิดข้อมูลวันที่/เวลาที่ขยายตามตารางด้านล่าง
| รหัส | DTEData | DTData |
|---|---|---|
| 1 | 1/1/2 1:01:03.1234567 AM | 1/1/2001 |
ชื่อตาราง: DTETable
ชนิดข้อมูล ID: Autonumber
ชนิดข้อมูล DTEData: วันที่/เวลาที่ขยาย
ชนิดข้อมูล DTData: วันที่/เวลา
ตัวอย่าง: การแสดงวันที่และเวลา
ตัวอย่างต่อไปนี้จะแสดงวันที่และเวลา รูปแบบที่ใช้คือ mm/dd/yyyy hh:mm:ss.nnnnnnn ในนาฬิกาแบบ 24 ชั่วโมง รูปแบบไม่สามารถกำหนดเองได้
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
ผล Access แสดง: 01/01/0002 01:01:03.1234567
ตัวอย่าง: การใส่วันที่และเวลา
ตัวอย่างต่อไปนี้จะใส่วันที่และเวลาโดยใช้รูปแบบสตริง รูปแบบวันที่และเวลามาตรฐานทั้งหมดได้รับการรองรับ
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
ผล Access จะเพิ่มแถวใหม่ (ID = 2):
| รหัส | DTEData | DTData |
|---|---|---|
| 1 | 1/1/2 1:01:03.1234567 AM | 1/1/2001 |
| 2 | 1/1/9999 1:01:01.0123000 AM | 1/1/2001 |
ตัวอย่าง: การประเมินนิพจน์คิวรี
ตัวอย่างต่อไปนี้ใช้ ฟังก์ชัน Day เพื่อแยกหมายเลขวันออกจากเขตข้อมูลวันที่และเวลา
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
ผล Access จะแสดง:
วันของเดือนคือ: 1
วันของเดือนคือ: 1
ฟังก์ชันที่ทํางานกับวันที่/เวลาที่ขยายในนิพจน์คิวรี
ฟังก์ชันต่อไปนี้ทํางานกับวันที่/เวลาที่ขยายในนิพจน์คิวรี:
ปี, เดือน, วันทํางาน, วัน, ชั่วโมง, นาที, วินาที, เพิ่มวันที่, DateDiff และ DatePart
นอกจากนี้ยังมีฟังก์ชันบางเวอร์ชันที่ขยายเวลาซึ่งไม่สามารถใช้ชนิดของอาร์กิวเมนต์เพื่อกําหนดว่าการคํานวณควรมีค่าวันที่/เวลาที่ขยาย ต่อไปนี้คือ:
DateValueExtended, TimeValueExtended, DateSerialExtended, TimeSerialExtended, NowExtended, DateExtended, DateTimeExtended และ TimeExtended
ฟังก์ชันเหล่านี้ทํางานแบบเดียวกับฟังก์ชันที่ไม่มี "ขยาย" ที่ส่วนท้าย แต่ส่งกลับค่า วันที่/เวลาที่ขยาย แทนค่า วันที่/เวลา
โปรดทราบว่า VBA ไม่ได้ถูกปรับเปลี่ยน ฟังก์ชันใหม่จะไม่เป็นที่รู้จักในโค้ด VBA และฟังก์ชันที่มีอยู่จะไม่ทํางานกับค่าวันที่/เวลาที่ขยาย
ตัวอย่าง
คิวรีต้นฉบับ:
Select DateValue([OrderDate]) AS OrderDateOnly_DateValue
, Format([OrderDate],"Short Date") AS OrderDateOnly_Format
From tblOrders
ตอนนี้ ให้เปลี่ยน DateValue([OrderDate]) เป็น DateValueExtended([OrderDate]) ซึ่งจะแก้ไขนิพจน์แรก
โปรดสังเกตว่า Access จะไม่จัดการฟังก์ชัน Format สําหรับคอลัมน์วันที่/เวลาที่ขยาย คุณสามารถตั้งค่าคุณสมบัติ รูปแบบ สําหรับคอลัมน์ได้
ดังนั้น ถ้าคุณใช้:
SELECT DateValueExtended([OrderDate]) AS OrderDateOnly_DateValue, Table1.OrderDate
FROM Table1;
และตั้งค่าคุณสมบัติ รูปแบบ สําหรับคอลัมน์ที่สองเป็น "วันที่แบบสั้น" คุณจะได้รับผลลัพธ์ที่คุณต้องการ
ดูเพิ่มเติม
บทนำสู่ชนิดข้อมูลและคุณสมบัติเขตข้อมูล