我有一个MySQL数据库,记录了各种客户端的工作小时数。它有两个表,一个存储小时数,另一个表包含我为每个客户工作的不同费率。
我有一个网页,以表格格式显示数据,显示开始/停止时间,活动,计算小时,费率以及其他几个信息来电。< / p>
小时列使用TIME_FORMAT( TIMEDIFF( end_date, start_date ) , '%h %i' ) AS Hours
进行计算,效果很好,为我提供了工作小时/分钟。但是,金额列仅显示小时*费率计算而非小时和最小*费率。
如何包含会议记录?
TIME_FORMAT( TIMEDIFF( end_date, start_date ) , '%h %i' ) * rate
...就是我现在用来计算总金额的,但正如我所说的,会忽略分钟值。
感谢任何帮助,尊重罗迪
答案 0 :(得分:3)
使用TIMESTAMPDIFF
代替TIMEDIFF
,它会为您提供指定度量(秒,小时,年)的差异。在查询中使用它:
SELECT TIMESTAMPDIFF( MINUTE , start_date, end_date ) * ( rate / 60 ) AS billable_amount
FROM `your_table`
答案 1 :(得分:2)
'%h %i'
会产生类似17 15
的内容 - 这是字符串值,而不是可以与其他数字相乘的内容。
将TIMESTAMPDIFF
与单位MINUTE
而不是TIME_FORMAT
一起使用,或者,如果这不起作用(因为根据文档需要完整日期值),TIME_TO_SEC
(除以60)。
答案 2 :(得分:0)
SELECT TIME(NOW());
+-------------+
| TIME(NOW()) |
+-------------+
| 16:29:13 |
+-------------+
SELECT TIME_TO_SEC(TIME(NOW()))/3600;
+-------------------------------+
| TIME_TO_SEC(TIME(NOW()))/3600 |
+-------------------------------+
| 16.4875 |
+-------------------------------+
答案 3 :(得分:0)
如果您的总时间值以00:00格式存储,小时费率以00.00格式存储,则可以使用以下查询返回2位小数值;
SELECT ROUND(SUM( TIME_TO_SEC('time') * ('hourly_rate')))/60/60 AS 'total_value' FROM 'table'