mysql:两个时间相减,得出这种格式的时间 '2年240天17小时56分2秒'能用sql写出来吗 ?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql:两个时间相减,得出这种格式的时间 '2年240天17小时56分2秒'能用sql写出来吗 ?相关的知识,希望对你有一定的参考价值。

declare @str int
set @str=datediff(second,'2016-01-01','2017-08-01 08:12:30') --日期时间差
select cast(@str/(86400*365) as char)+'年'
select cast(@str/86400%365 as char)+'天'
select cast(@str/3600%24 as char)+'时'
select cast(@str/60%60 as char)+'分'
select cast(@str%60 as char)+'秒'

你自己修改下 然后字符串链接就能得出结果

参考技术A 没有这种函数 参考技术B 自己写算法了

Mysql 两个日期字段相减得到秒

前言:测试工程师日常,为了验证字段:平均回复时长 显示是否正确,所以需要将2个日期字段进行相减,得出的数据转化为小时,然后看小时落在哪个区间端里边,前端就显示哪个区间端。规则:<=5分钟,显示5分钟内;<=30分钟,显示30分钟内;<=1小时,显示1小时内,依次类推,直到>=24小时,显示未知。


一、初步计算

测试数据如下,需求是:将字段dtm_accept 和字段dtm_crt 两列进行相减,得出的数据累加并除以条数,根据返回的结果,取对应的区间。

SQL语句:

select dtm_accept , dtm_crt, 
TIMESTAMPDIFF(SECOND,dtm_accept,dtm_crt) as aSecond,
TIMESTAMPDIFF(MINUTE,dtm_accept,dtm_crt) as bMinute,
TIMESTAMPDIFF(HOUR,dtm_accept,dtm_crt) as cHour
from test

执行上面的sql语句,得出以下:

Mysql 两个日期字段相减得到秒

手动将aSecond这一列,相加 并换算为小时数,最后的结果=小时数/6(条数)

179740 秒=49.9277778 时

49.93/6=8.32 所以显示的区间数应该是:9小时内

二、进一步优化:

select 
dtm_accept ,
dtm_crt,
TIMESTAMPDIFF(SECOND,dtm_accept,dtm_crt) as aSecond,
TIMESTAMPDIFF(MINUTE,dtm_accept,dtm_crt) as bMinute,
TIMESTAMPDIFF(HOUR,dtm_accept,dtm_crt) as cHour
from test
union ALL
select
' ' ,
'合计',
SUM(TIMESTAMPDIFF(SECOND,dtm_accept,dtm_crt)) ,
SUM(TIMESTAMPDIFF(MINUTE,dtm_accept,dtm_crt)) ,
SUM(TIMESTAMPDIFF(HOUR,dtm_accept,dtm_crt) )
from test

通过sql语句,直接计算出毫秒数,转成小时在除以6 ,

49.93/6=8.32 所以显示的区间数应该是:9小时内


三、扩展:将带毫秒的时间格式化为不带毫秒的时间

select dtm_upt,DATE_FORMAT(dtm_upt,"%Y-%m-%d %H:%i:%S") from test


以上是关于mysql:两个时间相减,得出这种格式的时间 '2年240天17小时56分2秒'能用sql写出来吗 ?的主要内容,如果未能解决你的问题,请参考以下文章

java年月相减得出哪几个月份

Mysql 两个日期字段相减得到秒

php中两个时间相减怎么得到年数

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

2道acm简单题(2013):1.(时分秒)时间相减;2.主持人和N-1个人玩游戏,每个人说出自己认识的人数,判断其中是否有人说谎。

MySQL两个时间相减