2012-06-17 5 views
4

unix_timestamp 함수를 사용하여 값을 반환하려하지만 이상하게 작동합니다.UNIX_TIMESTAMP는 0을 반환합니다.

set @currentdate:= UNIX_TIMESTAMP(NOW() + 1000) /* 1339947588 */ 
set @currentdate:= UNIX_TIMESTAMP(NOW() + 2000) /* 1339948188 */ 
set @currentdate:= UNIX_TIMESTAMP(NOW() + 3000) /* 1339948788 */ 

set @currentdate:= UNIX_TIMESTAMP(NOW() + 4000) /* 0 */ 
set @currentdate:= UNIX_TIMESTAMP(NOW() + 5000) /* 0 */ 
set @currentdate:= UNIX_TIMESTAMP(NOW() + 6000) /* 0 */ 
set @currentdate:= UNIX_TIMESTAMP(NOW() + 7000) /* 0 */ 

set @currentdate:= UNIX_TIMESTAMP(NOW() + 8000) /* 1339949388 */ 
set @currentdate:= UNIX_TIMESTAMP(NOW() + 9000) /* 1339949988 */ 
set @currentdate:= UNIX_TIMESTAMP(NOW() + 10000) /* 1339950588 */ 

왜 4000-7000 사이의 값으로 0 값을 반환합니까?

시간이 지나갈 때마다 0을주는 간격이 바뀌기 때문에 현재 시간과 관련된 대답을 봅니다. 그 이유는 무엇일까요?

미리 감사드립니다.

답변

4

전혀 이상하지 않습니다. 결과에 UNIX_TIMSETAMP()을 부르기 전에 NOW()의 결과에 숫자를 추가하려고합니다. 나는 당신이이 당신의 가치를 추가하기 전에 UNIX_TIMESTAMP를 호출 할 생각 :

UNIX_TIMESTAMP(NOW()) + 4000 

하거나

UNIX_TIMESTAMP() + 4000 

이들 모두 현재 시간으로 4000 을 추가합니다. 또 다른 해결책은 날짜에 시간 단위를 추가 할 INTERVAL 키워드를 사용하는 것입니다 YYYYMMDDHHMMSS.uuuuuu, 예를 들어, 20071215235026.000000 :

NOW() + INTERVAL 4000 SECOND 

NOW() + 4000이 평가 the manual에 따르면, NOW()이 형식의 수를 반환합니다. 이것에 4000을 더하면 실제 날짜와 비슷한 것을 얻을 수도 있고 그렇지 않을 수도 있습니다. 보시다시피, 이 아닌 초 또는 기타 정의 된 엔터티를 추가하십시오. 올바른 날짜를 얻으면 UNIX_TIMESTAMP은 타임 스탬프를 반환하고, 그렇지 않으면 0을 반환합니다.

+0

정말 좋은 대답 +1 –

2

그런 식으로 테스트를 위해 NOW()을 사용하면 혼란스러운 결과를 초래할 수 있습니다. 그럼 변수에 넣어 보자

SET @now=NOW(); 

이의 그것을 살펴 보자 :

SELECT @now; 
-> 2012-06-17 17:42:01 

흠을. 어쩌면 우리는 그것을 수치 적 맥락에서 사용하기를 원할 것입니다.

SET @now=NOW()+0; 
SELECT @now; 
-> 20120617174201 
SELECT UNIX_TIMESTAMP(@now); 
-> 1339947721 

아. 그게 뭐야? 현재 날짜와 시간입니다. 2012-06-17 17:42:01 및 해당 UNIX 시간 소인.

그리고 지금은?

SELECT @now + 2000; 
-> 20120617176201 
SELECT UNIX_TIMESTAMP(@now + 2000); 
-> 0 

위의 논리에 따르면, 2012-06-17 17:62:01이됩니다. 이것은 유효하지 않으므로 UNIX_TIMESTAMP()은 우울합니다. 우리가 할 경우

그러나,

SELECT @now + 7000; 
-> 20120617181201 
SELECT UNIX_TIMESTAMP(@now + 7000); 
-> 1339949521 

우리는 다시 평가 될 수있는 유효한 시간 ( 2012-06-17 18:12:01)의 범위에 도달합니다.

+0

자세한 설명 +1 –

관련 문제