2009-09-08 3 views
3

SQL 2005 db에 대한 쿼리를 실행하는 일부 레거시 VB6 코드 (내 년 이전, 몇 년 전)를보고 있습니다. WHERE 절에 날짜 제한을 제공합니다. 여기서 날짜는 VB6의 날짜에 CLng()의 결과로 정수 값으로 제공됩니다.INTEGER에서 DATETIME으로의 변환이 VB6과 다릅니다

... 
WHERE SomeDateField >= 40064 

40064은 VB6가에 CLng()을 수행하여 (9월 8일)에 오늘 날짜를 변환하는 것입니다.

SELECT CAST(40064 AS DATETIME) 

을 그리고 결과는 예상되지 않기 : 그러나, T-SQL이 정수 실제로 9월 10일로 변환합니다.

VB와 T-SQL 간의 변환에서이 차이가 발생할 수있는 사람은 누구입니까?

저는 항상 문제없이 작동한다는 것을 확신합니다. 분명히 표준 ISO 형식의 날짜로 날짜를 전달하는 것이 좋습니다. 그러나이 불일치의 원인을 찾기 시작해야합니다.

+0

, SQL 2005이 아닌 그 수십 년 오래된, 나는 ISO 당신의 제안에 가고 싶어 –

+0

) 날짜 ... –

+0

@Moayad - : 원래 SQL 2000에 대해 실행, 동일한 결과를 제공하는 2005로. – AdaTheDev

답변

6

는 VB의 날짜가 1899년 12월 30일에 시작하는 것으로 보인다 :

?CDbl(#30/12/1899 03:00:01#) 
0.125011574074074 

SQL 반면 날짜가 1900년 6월 1일에 시작 :

SELECT CAST(0 AS DATETIME) 
1900-01-01 00:00:00.000 

이 결과를 :) 맞는 이일 차이를 제공합니다.

당신은 알고
'VB6 
CDbl(#2009-09-08#) 
40064 

-- SQL: 
SELECT CAST(40064 AS DATETIME) 
2009-09-10 00:00:00.000 
+0

1899 년 12 월 30 일 시작하는 것이 이상합니다! 좋은 설명, +1. –

+0

@ Grzegorz - 건배, 그럴거야. joelonsoftware 링크 감사합니다 :) – AdaTheDev

+0

대답 주셔서 감사합니다, 난 그냥 SSIS 2008 및 SQL 서버 2008과 상호 작용하는 동일한 문제가있었습니다. 그것은 SSIS 여전히 VB에서 방법을 사용하여 일부 변환을 수행하는 것, – river0

1

나는 그것이 1900 년 2 월 29 일 이었는지 여부와 관련이 있다고 생각한다. 나는 VB6이 있다고 생각하지만, 예를 들어 자바 스크립트는 동의하지 않는다. 그러나 SQL Server가이 문제를 어떻게 처리하는지는 알 수 없습니다. 나는 또한 그것이 feb를 계산하지 않는다고 믿는다. 29.

3

this 스레드에 설명 된 Excel과 SQL 서버간에 비슷한 문제가 있습니다. 같은 것이라고 생각합니까?

+0

그건 같은 문제로 보인다 - 2 일간의 불일치. 이것 같이 더 이상 연결은 매우 평가 될 것입니다! – AdaTheDev

+0

+1에 대한 링크 – AdaTheDev

+2

여기에서 설명을 찾을 수 있습니다 : http://www.joelonsoftware.com/items/2006/06/16.html –

관련 문제