Liệu
SELECT CAST(CASE WHEN OLEFLOAT > 0 THEN
OLEFLOAT-2.0
ELSE
2*CAST(OLEFLOAT AS INT) - 2.0 + ABS(OLEFLOAT) END as datetime)
làm việc? Từ here
ngày
Một OLE Automation được thực hiện như một số dấu chấm động có phần không thể thiếu là số ngày trước hoặc sau nửa đêm, 30 tháng mười hai năm 1899, và có phân đoạn thành phần đại diện cho thời gian trên rằng ngày chia cho 24. Ví dụ: nửa đêm, ngày 31 tháng 12 năm 1899 là được đại diện bởi 1.0; 6 SA, 1 tháng 1 1900 được biểu thị bằng 2,25; nửa đêm, 29 tháng 12 năm 1899 được đại diện bởi -1.0; và 6:00, ngày 29 tháng 12 năm 1899 được đại diện bởi -1,25.
Điều đó nghe khá giống với cùng một hệ thống SQL Server sử dụng khi bạn bỏ ngày làm phao trừ chênh lệch cần thiết để bị mờ 2 và cho ngày "âm". Máy chủ SQL sẽ trừ đi ngược lại. Vì vậy, -1,25 là 18:00 trong khi OLE có nghĩa là 06:00.
Nguồn
2010-07-19 00:15:37
Tùy thuộc vào việc bạn sử dụng các cột này, tôi muốn có khuynh hướng lưu trữ chúng dưới dạng DATETIME thay vì tăng gấp đôi. Chỉ mục trên cột kép là vô dụng nếu bạn phải chuyển đổi giá trị thành DATETIME một cách rõ ràng để lọc. –