mysql两个时间(我有两个字段是datetime类型)相减返回两个时间的小时差,精确到小数点后两位应该怎么写

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql两个时间(我有两个字段是datetime类型)相减返回两个时间的小时差,精确到小数点后两位应该怎么写相关的知识,希望对你有一定的参考价值。

在mysql中,这种计算可用TIMESTAMPDIFF函数来解决,但是解决过程中需要将数据多次加工。

1、创建测试表及插入测试数据:

create table test
(time1 datetime,
time2 datetime)

insert into test values (\'2015-04-03 17:01:09\',\'2015-06-03 22:09:30\')

2、目前要结算time2和time1的时间差,用如下语句:

select round(TIMESTAMPDIFF(second,time1,time2)/3600,2) from test

结果如图:

解读:

首先,先用

select TIMESTAMPDIFF(second,time1,time2) from test

来计算两个时间之间的秒数差。

然后,得到的结果除以3600,即为这两个时间之间的小时数。

最后因为要求保留2位小数,则通过round函数,四舍五入,取出2位小数即可。

参考技术A FORMAT(X,D)
将数字X的格式写为'#,###,###.##',以四舍五入的方式保留小数点后D位, 并将结果以字符串的形式返回。若D为0,则返回结果不带有小数点,或不含小数部分。
mysql>SELECT FORMAT(12332.123456, 4);
-> '12,332.1235'

ROUND(X) ROUND(X,D)
返回参数X,其值接近于最近似的整数。在有两个参数的情况下,返回X,其值保留到小数点后D位,而第D位的保留方式为四舍五入。若要接保留X值小数点左边的D位,可将D设为负值。
mysql>SELECT ROUND(-1.23);
-> -1
mysql>SELECT ROUND(-1.58);
-> -2
mysql>SELECT ROUND(1.58);
-> 2
mysql>SELECT ROUND(1.298, 1);
-> 1.3

mysql插入datetime类型字段

我一张表,有开始时间(stime)、结束时间(ftime),都是 datetime类型,我在插入数据的时候,如何限制才能使开始结束时间在两个小时之内

参考技术A 在程序段做一下过滤吧,比对两个时间的间隔,如果大于两小时后的话,直接返回个false不执行sql 参考技术B if (intval($end_time) - intval($start_time) <= 7200 )
$sql = "insert into table values( /*插入的时间*/ )";
else
$sql = "";

以上是关于mysql两个时间(我有两个字段是datetime类型)相减返回两个时间的小时差,精确到小数点后两位应该怎么写的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL计算两个字段日期差

mysql插入datetime类型字段

Access 2007:查询两个短日期值之间的 DateTime 字段

时间戳比 MySQL 中的 datetime 列快多少?

Sql字符串与时间比较问题

从 MySQL 日期字段中阻止“0000-00-00”