web-dev-qa-db-ja.com

日単位の2つのタイムスタンプのMySqlの違いは?

2つのタイムスタンプの差を日単位で取得するにはどうすればよいですか?これに日時列を使用する必要がありますか?


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を1日の秒数(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)
48
user151841

列の時間部分を無視しても問題ない場合は、 DATEDIFF() を使用すると、数日で探している差がわかります。

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

私はかなり古いことを知っていますが、私はそれのためだけに言います-私は同じ問題を探していて、ここに着きましたが、数日で違いが必要でした。

SELECT (UNIX_TIMESTAMP(DATE1) - UNIX_TIMESTAMP(DATE2))/60/60/24 Unix_timestampを使用して、秒単位の差を返し、次に分(seconds/60)、時間(minutes/60)、日(hours/24)に分割します。

12
Enrico

試してみるよりも完全なTIMESTAMP形式で返したい場合:-

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

のように戻ります

     diff
     - - -
    00:05:15
5
Kamlesh
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)
5
Daniel Vassallo

2番目までの日数の違いが必要な場合:

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

戻ります
diff
16.8629

4
Makulit A. Ko

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

ここで、datediffは2つの引数 'upto-date'、 'from-date'を取ります

私がやったことは、now()関数を使用して、私は得ることができないということです。 2013年6月20日から今日までの日数。

3
Arvind Kumar

テーブルからの日としてSELECT DATEDIFF(max_date、min_date)。これは、col max_dateおよびmin_dateは文字列データ型です。

0
Amit Bhat