จากปัญหาที่เจอตอนที่เขียนเรื่อง DBeaver: Export Data Formatting เพราะว่า database ตัวหนึ่งใช้ datetime อีกตารางใช้ datetime2 ข้อสังเกตทีเจอคือ เวลา datetime2 จะมีเลขอีก 3 ตัวเกินขึ้นมา โดยเป็น type ที่เริ่มมีใน SQL Server 2008 ครับ (เลขเวอร์ชันหลักคือ 10.0)
🕰️ การทำความเข้าใจความแตกต่างระหว่างชนิดข้อมูล datetime และ datetime2 ใน SQL Server นั้นมีความสำคัญในการจัดการข้อมูลวันที่และเวลาได้อย่างเหมาะสม นี่คือข้อแตกต่างหลัก ๆ
| DATA TYPE | DATETIME | DATETIME2 |
|---|---|---|
| ช่วงวันที่ที่รองรับ | 1753-01-01 ถึง 9999-12-31 | 0001-01-01 ถึง 9999-12-31 |
| ความละเอียด (Fractional Seconds) | ความละเอียด 3 ตำแหน่ง (วินาทีส่วนย่อย) โดยจะปัดเศษไปที่ .000, .003, หรือ .007 วินาทีเท่านั้น | ความละเอียด 7 ตำแหน่ง (วินาทีส่วนย่อย) ปรับแต่งได้ตั้งแต่ 0 ถึง 7 (เช่น datetime2(3), datetime2(7)) |
| พื้นที่เก็บข้อมูล | 8 ไบต์ (คงที่) | 6 ถึง 8 ไบต์ (ขึ้นอยู่กับความละเอียดที่กำหนด) |
| ความแม่นยำ | ต่ำกว่า เนื่องจากมีการปัดเศษวินาทีส่วนย่อย | สูงกว่า และแม่นยำกว่า เพราะรองรับความละเอียดได้ถึง 7 ตำแหน่ง |
| การใช้มาตรฐาน | เป็นชนิดข้อมูลดั้งเดิมของ SQL Server | สอดคล้องกับมาตรฐาน SQL Standard และความแม่นยำของ .NET Framework มากกว่า |
| สรุป | เข้ากับระบบเก่า | ดีกว่า |
รายละเอียดเพิ่มเติม
- ช่วงวันที่ที่กว้างขึ้น:
datetime2สามารถเก็บวันที่ได้ตั้งแต่ปี ค.ศ. 1 ในขณะที่datetimeเริ่มต้นที่ปี 1753 - ความแม่นยำของเวลา:
datetime2มีความสามารถในการกำหนดความละเอียด (Precision) ของวินาทีส่วนย่อยได้ (เช่นdatetime2(3)สำหรับมิลลิวินาที) ทำให้datetime2เหมาะสมกว่าสำหรับการใช้งานที่ต้องการความแม่นยำสูง - พื้นที่เก็บข้อมูลที่ประหยัดกว่า: สำหรับความละเอียดที่ต่ำกว่า 7 ตำแหน่ง (เช่น
datetime2(0)ถึงdatetime2(4)จะใช้เพียง 6 หรือ 7 ไบต์)datetime2สามารถใช้พื้นที่เก็บข้อมูลได้น้อยกว่าdatetimeที่ใช้ 8 ไบต์เสมอ - การปัดเศษของ
datetime: เป็นจุดที่ควรระวังอย่างยิ่ง เนื่องจากdatetimeจะปัดเศษวินาทีส่วนย่อยไปยังค่าที่ใกล้ที่สุดของ 0, 3, หรือ 7 มิลลิวินาทีเสมอ (เช่น...:45.345จะถูกเก็บเป็น...:45.347)
💡 สรุปการเลือกใช้
โดยทั่วไปแล้ว ควรใช้ชนิดข้อมูล datetime2 แทน datetime เนื่องจาก:
- มีความแม่นยำสูงกว่า และไม่มีปัญหาเรื่องการปัดเศษของวินาทีส่วนย่อย
- มีช่วงวันที่ที่กว้างกว่า
- สอดคล้องกับมาตรฐาน SQL และมีความยืดหยุ่นในการใช้พื้นที่เก็บข้อมูลมากกว่า
อ่านเพิ่มเติม
About the author