จากปัญหาที่เจอตอนที่เขียนเรื่อง 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 และมีความยืดหยุ่นในการใช้พื้นที่เก็บข้อมูลมากกว่า
อ่านเพิ่มเติม