Добавление определенных минут времени в MySQL - PullRequest
6 голосов
/ 15 сентября 2009

Этот вопрос относится к этому вопросу

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

Итак, я хочу добавить минуты к значению времени. Я пробовал функцию DATE_ADD, но она ожидает, что дата будет datetime, с установленной datepart. Я также попробовал функцию ADDTIME, но проблема здесь в том, что поле длительности указывается в целых минутах, а не в формате чч: мм: сс, поэтому оно просто добавляет его в виде секунд.

Кто-нибудь знает способ сделать это?

[править]

Это текущий запрос:

SELECT ADDTIME(startTime, duration * 60), startTime, duration FROM tblAppointment
JOIN tblThreatment ON tblThreatment.threatmentid = tblAppointment.threatment_id;

и вот результат:

+-----------------------------------+-----------+----------+
| ADDTIME(startTime, duration * 60) | startTime | duration |
+-----------------------------------+-----------+----------+
| 09:18:00                          | 09:00:00  |       30 |
| 10:09:00                          | 10:00:00  |       15 |
| 09:09:00                          | 09:00:00  |       15 |
| 10:57:00                          | 10:30:00  |       45 |
+-----------------------------------+-----------+----------+

Ответы [ 4 ]

23 голосов
/ 15 сентября 2009

Addtime - определенно способ ... просто добавить определенное количество минут, которые вы могли бы сделать что-то вроде:

 AddTime('00:00:00', '00:10:00')

Это добавит 10 минут к первому значению.

Вы можете прочитать больше на dev.mysql.com здесь: http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_addtime

EDIT:

В дополнение к вашему комментарию. Если вы получаете значение для добавления в формате mm и ничего больше, тогда вы можете проанализировать значение времени с помощью функции SEC_TO_TIME(). Как это:

SELECT ADDTIME(startTime, SEC_TO_TIME(duration*60)), startTime, duration
FROM tblAppointment
JOIN tblThreatment ON tblThreatment.threatmentid = tblAppointment.threatment_id;

Это вернет время в формате hh:mm:ss минут.

2 голосов
/ 19 декабря 2017

Простой способ сложения и вычитания интервалов из дат и времени - просто использовать + или - и слово INTERVAL:

SELECT startTime + INTERVAL 10 MINUTE

Вы можете добавлять и вычитать секунды, минуты, дни, недели, месяцы и т. Д. Полный список здесь https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_date-add

Арифметика даты также может быть выполнена с использованием INTERVAL вместе с + или - оператор:

date + INTERVAL expr unit 
date - INTERVAL expr unit 

Интервал expr единица допускается по обе стороны от оператора +, если выражение на другая сторона - это значение даты или даты и времени. Для - оператора, ИНТЕРВАЛ Единица expr разрешена только с правой стороны, потому что она не делает смысл вычитать значение даты или времени из интервала.

0 голосов
/ 10 марта 2017

TL: DR

умножить минуты на 100, а не 60

ПОЯСНЕНИЯ

Если вы хотите добавить минуты в формате MM, как в вашем примере, и избегать преобразования их в формат HH:MM:SS, вам нужно умножить минуты на 100, а не на 60:

SELECT ADDTIME(startTime, duration * 100), startTime, duration FROM tblAppointment
JOIN tblThreatment ON tblThreatment.threatmentid = tblAppointment.threatment_id;

Это потому, что в документации MySQL написано:

Например, вы можете думать о «1112» и 1112 как о значении «11: 12: 00» (12 минут после 11 часов), но MySQL интерпретирует их как «00: 11: 12» (11 минут, 12 секунд). Аналогично, «12» и 12 интерпретируются как «00: 00: 12».

То есть вы не хотите считать, сколько у вас секунд (например, 600 = 6 минут, а не 10 минут, как вы думаете)

Если вы хотите добавить 15 или 30 минут, просто добавьте 1500 или 3000, и все.

0 голосов
/ 15 сентября 2009

Возможно объединить ': 00' в конец значения из поля минут перед переходом к TIMEADD? Или, в качестве альтернативы, умножьте значение на 60.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...