2013-04-24 2 views
2

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

У меня есть сайт, который представляет данные в формате внесенного показывая Start/Stop Time, активность, Рассчитана Часы, Оценить и пару другой информации вызовов.

Hours column рассчитывается с использованием TIME_FORMAT(TIMEDIFF(end_date, start_date) , '%h %i') AS Hours, который отлично работает, что дает мне часы работы. Однако в колонке «Сумма» отображается только расписание часов *, а не часы & Мин * Скорость.

Как включить минуты?

TIME_FORMAT(TIMEDIFF(end_date, start_date) , '%h %i') * rate ... это то, что я использую сейчас, чтобы рассчитать общую сумму, но, как я сказал, значение минут игнорируется.

Цените помощь, считает Родди

+0

Наверняка вы хотите долю часа (в базе 10), а не «минуты» как таковые!?!?!? – Strawberry

ответ

3

Вместо TIMEDIFF используйте TIMESTAMPDIFF, который дает вам разницу в размере, указанном вами (секунды, часы, годы). Используйте его, как это в вашем запросе:

SELECT TIMESTAMPDIFF(MINUTE , start_date, end_date) * (rate/60) AS billable_amount 
FROM `your_table` 
2

'%h %i' приведет к чему-то вроде 17 15 - это значения а строки, а не то, что может быть умножен на другой номер.

TIMESTAMPDIFF Используйте с блоком MINUTE вместо TIME_FORMAT, или, если это не работает (потому что, согласно документации она нуждается в полном значении даты), TIME_TO_SEC (и разделить на 60).

+0

изготовление в бетоне, при условии, что скорость почасовая: TIMESTAMPDIFF (MINUTE, start_date, end_date) * (rate/60) –

+0

TIMESTAMPDIFF РАБОТАЕТ СОВЕРШЕННО - THANKYOU –

0
SELECT TIME(NOW()); 
+-------------+ 
| TIME(NOW()) | 
+-------------+ 
| 16:29:13 | 
+-------------+ 

SELECT TIME_TO_SEC(TIME(NOW()))/3600; 
+-------------------------------+ 
| TIME_TO_SEC(TIME(NOW()))/3600 | 
+-------------------------------+ 
|      16.4875 | 
+-------------------------------+ 
0

Если общее значение времени хранятся в формате 00:00 и почасовой ставке в формате 00.00 вы можете использовать следующий запрос, чтобы вернуть значение с 2 десятичными знаками;

SELECT ROUND(SUM(TIME_TO_SEC('time') * ('hourly_rate')))/60/60 AS 'total_value' FROM 'table' 
Смежные вопросы