2011-05-13 4 views
2

날짜/시간 값을 데이터베이스에서 sql float 유형 (DateTime.OADate에서 변환 됨)으로 저장하지만, 특정 상황에서는 데이터베이스에서 사람이 읽을 수있는 날짜/시간 열을 반환하는 것이 좋습니다. 나는 문Double을 DateTime 유형으로 변환하는 것이 2 일 만에 해제 되었습니까?

SELECT CAST (timerecorded_utc as DATETIME) FROM tablename 

을 실행할 수 있으며, 그것은 나에게 내가 찾고 있어요 날짜 시간 문자열을 줄 것이다 것을 발견했지만 정확히 이일으로 해제 될 것으로 보인다. 불일치에 대한 몇 가지 이유가 난 그냥

SELECT CAST (timerecorded_utc-2.0 as DATETIME) FROM tablename 

로 (이중 일일 = 1.0로 표현 시간 이후) 문을 수정할 수 있습니다 실현하지만 나는이 일치하는 경우 궁금 해서요 그리고 그것은 나에게 보인다 나는 실종되었다.

+0

데이터를 데이터베이스에 저장할 때 정확성이 떨어질 수 있습니까? –

+0

밀리 초의 시간이 정확하기 때문에 정밀도와 관련이 없다고 생각합니다. 날짜는 소수점 앞에 계산되고 시간은 소수점 뒤에 오는 값에서옵니다. 정확도와 관련이 있다면, 시간이 잘못 될 것입니다 (적어도 생각합니다) –

+0

@Matthew, date-to-float 변환은 어떻게 생겼습니까? –

답변

6

날짜가 사용하는 신기원이 다르기 때문입니다. 그것의 신기원을 가질 수로 SELECT CAST(0 AS DATETIME)

OADate이 조금 이상한 :

SQL 서버의 DATETIME는 다음 쿼리를 실행하여 볼 수있는 시대, 같은 01/01/1900 0시 0분 0초를 사용 30/12/1899 00:00:00 또는 31/12/1899 00:00:00입니다. 각각 Visual Basic 또는 Excel 사용자를 믿느냐에 따라 다릅니다. 귀하의 이틀간의 차이점에서 .NET 버전은 30 일로 간다.

따라서 이원 시간을 사용하면 두 가지 유형의 날짜 간을 원시 번호로 변환 할 때 결과에 ​​2 일 차이가 있습니다.

+0

이 광기에 어떤 방법이 있는지 아는 사람은 누구입니까? –

+0

굉장 왜 이런 생각하지 않았어 ... 내가 DateTime.FromOADate (0.0)를 실행하면 12/30/1899 12:00:00 AM 감사합니다 !!!! –

+0

Excel에는 또한 "기능"—가 Lotus 1-2-3에서 의도적으로 이월되었습니다! — 도약 규칙이 잘못 구현되었습니다. 올바른 윤년 규칙은 윤년이 4로 나눌 수있는 연도이며 400으로 나눌 수없는 경우 (예 : 윤년이 2004, 윤년이 2000, 윤년이 1900 인 경우) . Lotus 1-2-3 및 Excel에서는 4로 나눌 수있는 모든 연도가 윤년이라고 잘못 가정합니다. 자세한 내용은 http://support.microsoft.com/kb/214326을 참조하십시오. –

관련 문제