2011-11-29 2 views
0

간단한 캐스팅/변환이 될 것이라고 생각했지만 이상한 오류가 발생했습니다. 여기 BigInt를 SQL의 DateTime으로 변환 할 때 홀수 오류를 극복하는 방법

내 SQL입니다 :

select CONVERT(datetime,1322510754374,104) 

하지만 난이 오류를 얻을 : 나는 또한 시도

Arithmetic overflow error converting expression to data type datetime. 

:

select cast(1322510754374 as datetime) 

을하지만 난 같은 오류를 얻을

나는 그걸 알아 내려고 노력하고있어. 아웃. bigint를 datetime으로 변환하는 또 다른 방법이 있습니까?

나는 오늘 날짜와 같은 것을 기대하고 있습니다 : 2011-11-29 17 : 26 : 52.257, 그러나 내가 보여준 int는 이전 일입니다.

내가는

getDate() 

감사와 비교해야하기 때문에. 문의 숫자가 날짜로 변환 큰 훨씬 때문에

+2

그 숫자로부터 예상되는 날짜는 언제입니까? –

+0

큰 정수는 무엇을 나타 냅니까? 확실히 일처럼 보이지 않습니다. 초 또는 밀리 초입니까? 그리고 그것은 언제부터 시작 되었습니까? – MatBailie

+0

@Michael Fredrickson : 원본 게시물에 편집을 추가했습니다. –

답변

7

좋아, 내 추측하고는, 합리적인 하나는 1 일부터 밀리 초

월 1970 점이다 당신은 그래서 여기에 두 가지 옵션이 ... 당신은 당신이 알고 날짜를 사용하여, 어떻게 든 것을 재확인 할 필요가

DECLARE @stupid BIGINT 
SELECT @stupid = 1322510754374 

SELECT CAST(@stupid/86400000.0 + 25567 AS DATETIME) 

SELECT DATEADD(MILLISECOND, @stupid % 86400000, DATEADD(DAY, @stupid/86400000, '1970-01-01')) 

-- Both Give... 2011-11-28 20:05:54.373 

는 등, DATEADD에서 그 큰 숫자를 사용할 수 없습니다. 하지만 ... 나에게


을 확실히 보인다 그리고 내가 도움이되지 그렇게 피 묻은 사람과 작동하지 기뻐요 당신의 교수를 말한다.

행운을 빌어 요.

+0

당신의 도움과지도 모두를위한 Dems 감사합니다, 나는 나가 이것 좋은 w/이제있을 것이라는 점을 생각한다! –

0

당신은이 메시지를 잡은 ... 가장 큰 번호가 2958463 인 것은 시간을 추가하려면 9999-12-31

에 동일시하는 숫자에 소수점 이하 자릿수를 추가하면됩니다. 예 : 2958463.123

bigint 번호를 하드 코딩하는 경우 먼저 역순으로 시도하면 bigint가됩니다.

이 내가 당신의 날짜가 가장 가까운 성명 :

select CONVERT(datetime, 40874.726, 104) 
+1

* 숫자 *는 최소 날짜 이후의 일수를 나타냄을 나타낼 가치가 있습니다 (1 월 1 일). , 1900). 여러분이 말한 것처럼, 가능한 최대 값은 ~ 300 만입니다. 이것은 'bigint'보다는 'int'(또는 시간이 필요할 경우 부동 소수점)로 쉽게 나타낼 수 있습니다. –

+1

@Aaron : 숫자가 일이라고 가정하고 있습니다. 실제로 초의 숫자 일지라도 여전히 42000 년과 같습니다. 가정을하지 않는 것이 좋습니다. – MatBailie

+0

+1 좋은 지적입니다! 일 수 : – Aaron

관련 문제