programing

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

procenter 2023. 2. 2. 21:59
반응형

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

MySQL 데이터베이스에 타임 스탬프 시간 필드가 있으며 이 시간 필드는DATE내 콩에 데이터 입력.현재 타임스탬프와 데이터베이스에 저장된 타임스탬프의 차이가 20분 이상인 모든 레코드를 가져올 수 있는 쿼리를 만듭니다.

어떻게 해야 하죠?

내가 원하는 것은:

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

이를 위한 MySQL 함수 또는 SQL에서 수행할 수 있는 방법이 있습니까?

MySql 버전이 5.6보다 높은 경우 TIMESTAMPDIFF(unit, datetime_expr1, datetime_expr2)사용할 수 있습니다.

select * from MyTab T where
TIMESTAMPDIFF(MINUTE,T.runTime,NOW()) > 20
ROUND(time_to_sec((TIMEDIFF(NOW(), "2015-06-10 20:15:00"))) / 60);

MySql 버전 > = 5.6

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

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

매뉴얼에 따르면 첫 번째 인수는 다음 중 하나입니다.

MICROSECOND
SECOND
MINUTE
HOUR
DAY
WEEK
MONTH
QUARTER
YEAR

이것을 사용해 보세요.

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

메모: MySQL DateTime 형식을 사용하는 경우 이 기능이 작동합니다.Unix Timestamp(integer)를 사용하고 있는 경우는, 한층 더 간단하게 실시할 수 있습니다.

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

UNIX_TIMESTamp() 함수는 현재 UNIX 타임스탬프를 반환합니다.

다음과 같이 시험해 보십시오.
SELECT * FROM MyTab T WHERE CURRENT_TIMESTAMP() > T.runTime + INTERVAL 20 MINUTE;

CURRENT_TIMESTamp()는 함수이며 현재 날짜와 시간을 반환합니다.이 함수는 MySQL 4.0부터 동작합니다.

5.6 이전 버전의 MySql을 사용하는 경우 TIMESTAMPDIFF가 없습니다.그래서 이걸 위해 MySql 함수를 직접 썼어요%i 또는 %m을 분 동안, %h을(를) 시간 동안 액세스합니다.연장할 수 있어요.

사용 예:

 SELECT MYTSDIFF('2001-01-01 10:44:32', '2001-01-01 09:50:00', '%h')

이제 기능이 시작됩니다.즐길 수 있다:

 DROP FUNCTION IF EXISTS MYTSDIFF;

 DELIMITER $$
 CREATE FUNCTION `MYTSDIFF`( date1 timestamp, date2 timestamp, fmt varchar(20))
 returns varchar(20) DETERMINISTIC

 BEGIN

     declare secs smallint(2);
     declare mins smallint(2);
     declare hours int;
     declare total real default 0;
     declare str_total varchar(20);

     select cast( time_format( timediff(date1, date2), '%s') as signed) into secs;
     select cast( time_format( timediff(date1, date2), '%i') as signed) into mins;
     select cast( time_format( timediff(date1, date2), '%H') as signed) into hours;

     set total = hours * 3600 + mins * 60 + secs;  

     set fmt = LOWER( fmt);

     if fmt = '%m' or fmt = '%i' then
       set total = total / 60;
     elseif fmt = '%h' then
       set total = total / 3600;
     else
       /* Do nothing, %s is the default: */
       set total = total + 0;
     end if;

     select cast( total as char(20)) into str_total;

     return str_total;

 END$$
 DELIMITER ;

언급URL : https://stackoverflow.com/questions/7636599/calculating-time-difference-between-2-dates-in-minutes

반응형