Bezdepbonusu7Программирование: статьи и ответы

Вопрос

MySql разница между двумя отметками времени в днях?

Автор вопроса: user151841Ответов: 6

Как я могу узнать разницу между двумя отметками времени в днях? Должен ли я использовать для этого столбец datetime?


Я переключил свой столбец на datetime. Кажется, простое вычитание не дает мне результата за несколько дней.
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)
  • Какой тип данных у ваших столбцов / значений в настоящий момент? Andy Shellam 30.03.2010
  • Я использовал временные метки, но я просто изменил один столбец на datetime. user151841 30.03.2010

timestampdatetime

Ответы

Ответ 1 · рейтинг 111 · Uncle Arnie

Если вы предпочитаете игнорировать временную часть в столбцах, DATEDIFF () даст вам разницу в днях, которую вы ищете.

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

Ответ 2 · рейтинг 12 · Enrico

Я знаю, что он довольно старый, но я скажу просто ради - я искал ту же проблему и попал сюда, но мне нужна была разница в днях.

Я использовал SELECT (UNIX_TIMESTAMP(DATE1) - UNIX_TIMESTAMP(DATE2))/60/60/24 Unix_timestamp, возвращающий разницу в секундах, а затем я просто делю на минуты (секунды / 60), часы (минуты / 60), дни (часы / 24).

Ответ 3 · рейтинг 7 · Kamlesh

Если вы хотите вернуться в полном формате TIMESTAMP, попробуйте: -

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

вернуться как

     diff
     - - -
    00:05:15

Ответ 4 · рейтинг 5 · Makulit A. Ko

Если вам нужна разница в днях с учетом до секунды:

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

Он вернет
diff
16.8629

Ответ 5 · рейтинг 3 · Arvind Kumar

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

здесь dateiff принимает два аргумента: 'upto-date', 'from-date'

Что я сделал, так это то, что с помощью функции now () я не могу получить "нет". дней с 20 июня 2013 года по сегодняшний день.

Ответ 6 · Amit Bhat

ВЫБЕРИТЕ DATEDIFF (max_date, min_date) как дни из моей таблицы. Это работает, даже если столбцы max_date и min_date относятся к строковым типам данных.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы