Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 使用SQL转换和舍入(秒到分钟)_Mysql_Sql - Fatal编程技术网

Mysql 使用SQL转换和舍入(秒到分钟)

Mysql 使用SQL转换和舍入(秒到分钟),mysql,sql,Mysql,Sql,我的表上有一个表示秒的字段,我想转换成分钟 Select (100/60) as Minute from MyTable -> 1.66 我怎样才能得到1分40秒00:01:40,然后转到00:02:00,如果00:01:23转到00:01:30 使用Mysql 我不知道如何取整它,但是你可以将秒转换成时间,即hh:mm:ss格式,使用秒到秒时间(totaltime)你可以简单地编写自己的函数 但我更愿意用编程语言(PHP、Python、C)来实现这一点,而不是在数据库方面。有两种舍入方

我的表上有一个表示秒的字段,我想转换成分钟

Select (100/60) as Minute from MyTable
-> 1.66
我怎样才能得到1分40秒
00:01:40
,然后转到
00:02:00
,如果
00:01:23
转到
00:01:30


使用Mysql

我不知道如何
取整它,但是你可以将
转换成
时间
,即
hh:mm:ss
格式,使用
秒到秒时间(totaltime)
你可以简单地编写自己的函数


但我更愿意用编程语言(PHP、Python、C)来实现这一点,而不是在数据库方面。

有两种舍入方法,使用整数算术和避免浮点运算,一种是最接近30秒的值

  • ((秒+15)第30节)*30
  • (秒+15)-(秒+15)%30
后者更长,但在cpu时间方面应该更快


然后,您可以使用
SEC\u TO_TIME(seconds)
获取格式
hh:mm:ss
,如果确实需要
hh:mm
,请使用正确的5个字符


如果要避免
秒到秒的时间(秒)
,可以自己构建字符串

  • 分钟=总秒数DIV 60
  • 秒=总秒数%60

  • 最后一个字符串=
    LPAD(分钟,2,'0')|':'| LPAD(秒,2,'0')

所需结果:

A = 30
B = 60
C = 90
D = 120

结果:

A = 30

B = 30

C = 90

D = 90
A = 30

B = 60

C = 90

D = 120
我试着这样做:

select 

30* ceil(30/30) as A,

30* ceil(32/30) as B,

30* ceil(90/30) as C,

30* ceil(100/30) as D
结果:

A = 30

B = 30

C = 90

D = 90
A = 30

B = 60

C = 90

D = 120

谢谢你的帮助

您是否试图将其舍入到最近的30秒,并显示为
mm:ss
?是的,我试图将其舍入到最近的30秒,并显示为mm:sscheling引入浮点算法,目前正在浪费cpu周期。如果你不想四舍五入到最接近的30秒,但实际上总是四舍五入,那么我会用这个来代替
(x+29)-(x+29)%30
我想你需要用一些括号和
FLOOR()
ing或
DIV
ing…@pilcrow-括号,是的,我的错误。虽然不需要下限等,但必须确保所有值都是整数-这是一个关于如何使用整数算法实现这一点的示例,因为它比浮点算法占用更少的CPU。是的,您必须确保结果是整数。:)您的第一个示例在MySQL下给出了错误的值,如果“秒”是83。
/
运算符即使两个操作数都是整数,也会产生小数。因此,您必须将商
FLOOR()
设置为零(糟糕!),或者使用
DIV
代替
/
。这不是问题的答案