programing

두 타임스탬프 간의 MySql 차이(일)

sourcejob 2022. 12. 3. 00:34
반응형

두 타임스탬프 간의 MySql 차이(일)

어떻게 하면 두 타임스탬프의 일수 차이를 알 수 있을까요?여기에는 datetime 열을 사용해야 합니까?


I switched my column to datetime. Simple subtraction doesn't seem to give me a result in days.

mysql> SELECT NOW(), last_confirmation_attempt, NOW() - last_confirmation_attempt AS diff  FROM DateClubs HAVING diff IS NOT NULL ;
+---------------------+---------------------------+-----------------+
| NOW()               | last_confirmation_attempt | diff            |
+---------------------+---------------------------+-----------------+
| 2010-03-30 10:52:31 | 2010-03-16 10:41:47       | 14001084.000000 |
+---------------------+---------------------------+-----------------+
1 row in set (0.00 sec)

난 그렇게 생각하지 않아.diff몇 초면 끝납니다. 왜냐하면,diff하루의 초수(86,400)에 의한 회답이 없습니다.

mysql> SELECT NOW(), last_confirmation_attempt, ( NOW() - last_confirmation_attempt) / 86400 AS diff  FROM DateClubs HAVING diff IS NOT NULL ;
+---------------------+---------------------------+----------------+
| NOW()               | last_confirmation_attempt | diff           |
+---------------------+---------------------------+----------------+
| 2010-03-30 10:58:58 | 2010-03-16 10:41:47       | 162.0568402778 |
+---------------------+---------------------------+----------------+
1 row in set (0.00 sec)

열의 시간 부분을 무시해도 좋다면 DATIFF()를 통해 원하는 차이를 일 단위로 알 수 있습니다.

SELECT DATEDIFF('2010-10-08 18:23:13', '2010-09-21 21:40:36') AS days;
+------+
| days |
+------+
|   17 |
+------+

꽤 오래됐다는 건 알지만, 그냥 말해 두죠. 같은 문제를 찾아서 여기 왔는데, 며칠 동안 차이가 필요했어요.

나는 사용했다SELECT (UNIX_TIMESTAMP(DATE1) - UNIX_TIMESTAMP(DATE2))/60/60/24Unix_timestamp는 초 단위로 차이를 반환하고 분(초/60), 시간(분/60), 일(시간/24)으로 나눕니다.

CREATE TABLE t (d1 timestamp, d2 timestamp);

INSERT INTO t VALUES ('2010-03-11 12:00:00', '2010-03-30 05:00:00');
INSERT INTO t VALUES ('2010-03-11 12:00:00', '2010-03-30 13:00:00');
INSERT INTO t VALUES ('2010-03-11 00:00:00', '2010-03-30 13:00:00');
INSERT INTO t VALUES ('2010-03-10 12:00:00', '2010-03-30 13:00:00');
INSERT INTO t VALUES ('2010-03-10 12:00:00', '2010-04-01 13:00:00');

SELECT d2, d1, DATEDIFF(d2, d1) AS diff FROM t;

+---------------------+---------------------+------+
| d2                  | d1                  | diff |
+---------------------+---------------------+------+
| 2010-03-30 05:00:00 | 2010-03-11 12:00:00 |   19 |
| 2010-03-30 13:00:00 | 2010-03-11 12:00:00 |   19 |
| 2010-03-30 13:00:00 | 2010-03-11 00:00:00 |   19 |
| 2010-03-30 13:00:00 | 2010-03-10 12:00:00 |   20 |
| 2010-04-01 13:00:00 | 2010-03-10 12:00:00 |   22 |
+---------------------+---------------------+------+
5 rows in set (0.00 sec)

완전한 TIMESTAMP 형식으로 되돌리는 경우는, 다음의 순서에 따릅니다.

 SELECT TIMEDIFF(`call_end_time`, `call_start_time`) as diff from tablename;

처럼 돌아오다

     diff
     - - -
    00:05:15

1초까지의 일수 차이가 필요한 경우:

SELECT TIMESTAMPDIFF(SECOND,'2010-09-21 21:40:36','2010-10-08 18:23:13')/86400 AS diff

그것은 돌아올 것이다.
diff
16.8629

SELECT DATEDIFF( now(), '2013-06-20' );

여기서 datediff는 '최신'과 '최신'의 두 가지 인수를 받아들인다.

제가 한 일은 now() 함수를 사용하여 2013년 6월 20일부터 오늘까지의 일수를 취득할 수 있습니다.

테이블에서 날짜(max_date, min_date)를 날짜로 선택합니다.이 방법은 콜이max_date그리고.min_date문자열 데이터 유형입니다.

@DanielVassallo의 답변에 대해 자세히 설명하고, 다음 방법을 사용하여 대체 방법을 제공합니다.TIMESTAMPDIFF()대신 기능하다DATEDIFF()@DanielVassallo가 사용하는 함수 -

CREATE TABLE t (d1 timestamp, d2 timestamp);

INSERT INTO t VALUES ('2010-03-11 12:00:00', '2010-03-30 05:00:00');
INSERT INTO t VALUES ('2010-03-11 12:00:00', '2010-03-30 13:00:00');
INSERT INTO t VALUES ('2010-03-11 00:00:00', '2010-03-30 13:00:00');
INSERT INTO t VALUES ('2010-03-10 12:00:00', '2010-03-30 13:00:00');
INSERT INTO t VALUES ('2010-03-10 12:00:00', '2010-04-01 13:00:00');

SELECT d1, d2, TIMESTAMPDIFF(DAY, d1, d2) AS diff FROM t;

+---------------------+---------------------+------+
| d1                  | d2                  | diff |
+---------------------+---------------------+------+
| 2010-03-11 12:00:00 | 2010-03-30 05:00:00 |   18 |
| 2010-03-11 12:00:00 | 2010-03-30 13:00:00 |   19 |
| 2010-03-11 00:00:00 | 2010-03-30 13:00:00 |   19 |
| 2010-03-10 12:00:00 | 2010-03-30 13:00:00 |   20 |
| 2010-03-10 12:00:00 | 2010-04-01 13:00:00 |   22 |
+---------------------+---------------------+------+

언급URL : https://stackoverflow.com/questions/2546053/mysql-difference-between-two-timestamps-in-days

반응형