두 날짜 간의 시간 차이를 분 단위로 계산


79

DATE내 빈 의 데이터 유형에 매핑되는 MySQL 데이터베이스에 타임 스탬프 필드가 있습니다 . 이제 현재 타임 스탬프와 데이터베이스에 저장된 타임 스탬프의 차이가> 20 분인 데이터베이스의 모든 레코드를 가져올 수있는 쿼리를 원합니다.

내가 어떻게 해?

내가 원하는 것은 :

SELECT * FROM MyTab T WHERE T.runTime - now > 20 minutes

이것에 대한 MySQL 함수가 있습니까, 아니면 SQL에서 이것을 수행하는 방법이 있습니까?


2
타임 스탬프가 향후 20 분 이상인 레코드를 정말로 선택하려고합니까? 이것이 쿼리의 조건이 말하는 것이기 때문입니다.
Ilmari Karonen 2011 년

답변:



23
ROUND(time_to_sec((TIMEDIFF(NOW(), "2015-06-10 20:15:00"))) / 60);

14

오늘과 데이터베이스 날짜에 아래 코드를 사용하고 있습니다.

TIMESTAMPDIFF(MINUTE,T.runTime,NOW()) > 20

문서에 따르면 첫 번째 인수는 다음 중 하나 일 수 있습니다.

MICROSECOND
SECOND
MINUTE
HOUR
DAY
WEEK
MONTH
QUARTER
YEAR

3
때문에 %로 60 당신이 ... 일시간보다 큰 차이를 무시하고있다
스파크

@SparK이 정확 90 분 동안 그렇지 않으면 60 %를 제거 만 30 얻을 것이다
버팔로

6

이걸로 해봐:

select * from MyTab T where date_add(T.runTime, INTERVAL 20 MINUTE) < NOW()

참고 : 이것은 MySQL DateTime 형식을 사용하는 경우 작동합니다. Unix Timestamp (정수)를 사용하는 경우 더 쉬울 것입니다.

select * from MyTab T where UNIX_TIMESTAMP() - T.runTime > 20*60

UNIX_TIMESTAMP () 함수는 현재 유닉스 타임 스탬프를 반환합니다.


MySQL의 옵티마이 저가 스스로이 작업을 수행 할 수있을만큼 똑똑하다는 것은 모르겠지만 일반적으로 첫 번째 조건을 T.runTime < DATE_SUB(NOW(), INTERVAL 20 MINUTES).
Ilmari Karonen 2011 년

재 작성된 조건이 초기 조건보다 빠른 이유는 무엇입니까?
itsmeee 2011 년

1
그것은 MySQL이 스마트 충분한 경우, 수,하지만 당신은에 인덱스가있는 경우 일반적으로하지 않을 수 있습니다 t.col, 다음 t.col < func(const)보다 빠른되어야한다 invfunc(t.col) < constDB를이 오른쪽을 미리 계산하여 인덱스를 사용할 수 있기 때문이다.
Ilmari Karonen 2011 년

@IlmariKaronen 사용하면 실패 MINUTES하지만 사용 하면 작동합니다 MINUTE. 당 MySQL의 문서 MINUTE 에서 예상 DATE_ADDDATE_SUB5.5 버전에서. MINUTES다른 버전에서도 작동 합니까 ?
Andrew Kozak

1
@ 앤드류 : 당신 말이 맞아요 INTERVAL 20 MINUTE. 더 이상 내 댓글을 수정하여 수정할 수는 없지만 답변을 수정할 수 있습니다 (그냥 수정했습니다).
Ilmari Karonen 2012
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.