2010-07-19 14 views
9

Các cửa hàng ứng dụng của tôi có ngày tự động hóa OLE tăng gấp đôi với lệnh DateTime.ToOADate().Làm thế nào tôi có thể chuyển đổi giá trị Ngày Tự động hóa OLE thành một ngày trong SQL Server

Bây giờ, tôi cần tạo chế độ xem SQL cho tôi biết Ngày được lưu trữ. Làm thế nào tôi có thể nhanh chóng chuyển đổi gấp đôi thành một ngày?

Cảm ơn

+2

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. –

Trả lời

9

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.

+0

vâng, tôi đã câm và lần đầu tiên được hỏi trước khi thử dàn diễn viên hoặc chuyển đổi tùy chọn .... Nhưng bây giờ tôi có một vấn đề khác. Trong MS SQL 2005/8 giá trị 1 đại diện cho 2 tháng 1 năm 1900, vì vậy tất cả các ngày của tôi cộng với 2 ngày! Điều này có bình thường không? –

+0

@Nuno Tôi cũng tìm thấy điều đó. Tôi đã điều chỉnh bài đăng của mình. Có một nếp nhăn nhẹ khác với những ngày tiêu cực. Tôi sẽ cập nhật lại sau vài phút nữa. –

Các vấn đề liên quan