Kiểu dữ liệu Date và Time mới Trường hợp ứng dụng thực Không ai có thể phủ nhận tầm quan trọng của một kiểu dữ liệu chỉ có thể lưu trữ ngày tháng mà không có thời gian hoặc thời gian mà không có ngày tháng. Ví dụ, để lưu trữ ngày sinh của một nhân viên chúng ta sẽ chỉ cần lưu trữ ngày, còn thời gian là không cần thiết. Tương tự, để lưu trữ những thông tin theo từng giai đoạn trong ngày như từ 00:01 tới 08:00 (giai đoạn A), từ 08:01 đến 16:00 (giai đoạn B), và từ 16:01 đến 24:00 (giai đoạn C) thì chúng ta chỉ cần lưu trữ thời gian còn ngày không liên quan trong trường hợp này. Cho tới phiên bản SQL Server 2005 chúng ta không có lựa chọn lưu trữ riêng biệt, thay vào đó phải lựa chọn sử dụng kiểu dữ liệu hoặc DATETIME hoặc SMALLDATETIME. Việc lưu cả ngày và giờ không chỉ gây rắc rối khi làm việc mà còn làm lãng phí vùng lưu trữ. Ví dụ, để lưu trữ ngày sinh của 100 triệu khách hàng chúng ta sẽ phải sử dụng khoảng 770MB nếu sử dụng kiểu dữ liệu DATETIME. Tuy nhiên trong SQL Server 2008 vấn đề này đã được khắc phục, giờ đây chúng ta có thể lưu trữ cùng loại thông tin với dung lượng chiếm dụng ít hơn nhiều (khoảng 290MB trong ví dụ trên, chỉ lưu trữ ngày) bằng cách chỉ lưu trữ ngày hoặc giờ. Không chỉ có vậy, những kiểu dữ liệu mới này sẽ có một vùng rộng hơn, thời gian được chia nhỏ tới đơn vị nano giây (một phần tỷ giây), và cho phép lưu trữ khoảng trống múi giờ với dữ liệu đó. SQL Server 2008 giới thiệu 4 kiểu dữ liệu DATETIME mới bao gồm: DATE Trong các phiên bản SQL Server trước, chúng ta phải sử dụng kiểu dữ liệu DATETIME hay SMALLDATETIME cho dù chúng ta chỉ cần lưu trữ Date. Những kiểu dữ liệu này lưu trữ thời gian như một thành phần của nó. Sau đó chúng ta cần phải định dạng dữ liệu kết xuất để chỉ hiện thị thành phần ngày. SQL Server 2008 giới thiệu kiểu dữ liệu DATE rất hữu dụng trong việc lưu trữ ngày. Nó hỗ trợ lịch Gregorian và sử dụng 3 byte để lưu trữ ngày. Vùng của kiểu dữ liệu DATE từ 01-01-0001 tới 12-31- 9999, trong khi kiểu dữ liệu DATETIME có vùng từ 01-01-1753 tới 31-12-9999 và SMALLDATETIME từ 01-01-1900 tới 06-06-2079. CREATE TABLE Employee ( EmpId INT IDENTITY, Name VARCHAR(100), DOB DATE, Date of birth column will store only date and no time part DOJ DATE DEFAULT GETDATE() Date of joining will be default, again only date, no time part ) GO Tạo một biến DATE rồi gán một giá trị ngày DECLARE @DOB DATE = CONVERT(DATE,'12/05/1982') INSERT INTO Employee(Name, DOB) VALUES ('Rocky', @DOB) GO SELECT * FROM Employee GO TIME Giống với kiểu dữ liệu Date, trong SQL Server 2008 giới thiệu một kiểu dữ liệu TIME được sử dụng trong trường hợp chỉ cần lưu trữ thời gian. Vùng dữ liệu TIME trong khoảng 00:00:00.0000000 tới 23:59:59.9999999. Độ chính xác của kiểu dữ liệu TIME lên đến 100 nano giây, tuy nhiên chúng ta có thể giảm giá trị này để tiết kiệm bộ nhớ (khoảng 3 đến 5 byte). Kiểu dữ liệu này không nhận biết được múi giờ, và nó sử dụng hệ 24 giờ. CREATE TABLE ShiftMaster ( ShiftName VARCHAR(100), StartTime TIME, StartTime without storing date component EndTime TIME EndTime without storing date component . lưu trữ khoảng trống múi giờ với dữ liệu đó. SQL Server 2008 giới thiệu 4 kiểu dữ liệu DATETIME mới bao gồm: DATE Trong các phiên bản SQL Server trước, chúng ta phải sử dụng kiểu dữ liệu. Giống với kiểu dữ liệu Date, trong SQL Server 2008 giới thiệu một kiểu dữ liệu TIME được sử dụng trong trường hợp chỉ cần lưu trữ thời gian. Vùng dữ liệu TIME trong khoảng 00:00:00.0000000. như một thành phần của nó. Sau đó chúng ta cần phải định dạng dữ liệu kết xuất để chỉ hiện thị thành phần ngày. SQL Server 2008 giới thiệu kiểu dữ liệu DATE rất hữu dụng trong việc lưu trữ