Posts Tagged ‘DATETIME’

 

Dữ Liệu Kiểu DATE Và Kiểu TIME

Cùng với loại dữ liệu DATETIME để chứa dữ liệu kiểu ngày giờ, SQL Server 2008 bổ sung thêm hai kiểu dữ liệu là DATE cho ngày riêng và TIME cho giờ riêng.

CREATE TABLE #t (d DATE, ti TIME)
 
INSERT INTO #t VALUES(GETDATE(), GETDATE())
INSERT INTO #t VALUES('2013-06-21', '03:23pm')
INSERT INTO #t VALUES('2013-06-21', '14:13')
INSERT INTO #t VALUES('2013-06-21', '16:36:12.124')

Như ở ví dụ trên, bạn thấy khi thêm dữ liệu kiểu DATETIME vào trường kiểu DATE, chỉ dữ liệu phần DATE được lưu lại và phần TIME bị cắt bỏ. Và khi thêm dữ liệu kiểm DATETIME vào trường kiểu TIME, chỉ dữ liệu phần TIME được giữ lại còn phần DATE bị cắt bỏ. Trường kiểu TIME cũng nhận dữ liệu với khuôn dạng và độ chính xác khác nhau.
Việc tách DATE và TIME làm hai kiểu dữ liệu làm tăng tính linh hoạt cho ứng dụng. Ví dụ khi bạn cần lưu thông tin các lần xảy ra mất điện ở các vùng trong một tỉnh, có thể có lần bạn chỉ nhận được thông tin về ngày mà không có giờ cụ thể. Trong trường hợp này, ở các phiên bản trước, khi lưu vào trường DATETIME, phần thông tin về thời điểm sẽ tự động được đặt thành 00:00:00 (nửa đêm), tuy nhiên điều này có thể gây nhầm lẫn vì có thể có lần mất điện xảy ra chính xác vào lúc nửa đêm. Điều này trở nên quan trọng hơn khi bạn lưu kèm theo thời điểm điện được khôi phục trở lại, chẳng hạn để đánh giá tốc độ khôi phục sự cố. Với những lần mất điện mà không thu thập được thời điểm, khoảng thời gian mất điện luôn được tính bắt đầu từ lúc 00:00:00 và như vậy là sai.
Khi tách làm hai trường DATE và TIME, bạn có thể nhập ngày và giờ mất điện vào hai trường và khi không có dữ liệu về giờ, trường sẽ chứa NULL. Khi phân tích dữ liệu, bạn phân biệt được trường hợp nào có giờ và trường hợp nào không để tính toán cho chính xác.
Trường kiểu DATE khi được chuyển thành kiểu DATETIME sẽ tự động thêm ’00:00:00′ vào phần thời gian. Còn trường kiểu TIME khi được chuyển thành kiểu DATETIME sẽ được cộng thêm ’1900-01-01′ vào phần ngày tháng. Bạn cũng có thể ghép hai trường kiểu DATE và TIME để tạo thành dữ liệu kiểu DATETIME. Hãy xem các tình huống ở ví dụ dưới:

SELECT CAST(d AS DATETIME), CAST(ti AS DATETIME),
	CAST(d AS DATETIME) + CAST(ti AS DATETIME)
FROM #t
Posted on 7/6/2013 by Vũ Huy Tâm | Categories: Thiết kế database

Để Dùng Được Index Trong Điều Kiện Tìm Kiếm Của Câu Lệnh

Trong một câu lệnh SQL, một điều kiện tìm kiếm ở mệnh đề WHERE được gọi là sargable (viết tắt từ Search Argument-Able) nếu index có thể được sử dụng khi thực hiện câu lệnh (giả sử cột tương ứng có index). Ví dụ, với câu lệnh sau:

SELECT *
FROM dbo.Customer
WHERE CustomerID = 1234

thì điều kiện “CustomerID = 1234″ là sargable, vì nó cho phép index trên cột CustomerID được sử dụng.
index giúp tăng hiệu năng của câu lệnh lên rất nhiều, việc viết code để sao cho các điều kiện tìm kiếm trở thành sargable là một mục tiêu rất quan trọng. Một nguyên tắc rất cơ bản trong SQL Server mà bạn có thể áp dụng trong rất nhiều trường hợp, đó là cột cần tìm phải đứng một mình ở một phía của biểu thức tìm kiếm, nói cách khác là không có hàm số hay phép tính toán nào áp dụng trên cột đó. Hãy xem xét hai câu lệnh dưới đây: … đọc tiếp »

Posted on 24/6/2010 by Vũ Huy Tâm | Categories: Index, Performance tuning