将MySQL中的DATETIME值舍入到最接近的分钟

Jas*_*son 2 mysql datetime

我在表中有一个DATETIME列,其t值如下:

|toStampActual      |
|-------------------|
|2014-09-09 13:00:00|
|2014-09-09 13:15:03|
|2014-09-09 13:14:55|
Run Code Online (Sandbox Code Playgroud)

我需要能够将这些值更新为:

|toStampActual      |
|-------------------|
|2014-09-09 13:00:00|
|2014-09-09 13:15:00|
|2014-09-09 13:15:00|
Run Code Online (Sandbox Code Playgroud)

基本上是圆形到最近的分钟...任何大于:30秒上升,任何更少的东西下降.

我找到了这个答案/sf/answers/1350378991/并将SQL更改为

SELECT TIME_FORMAT(
    SEC_TO_TIME(
        (TIME_TO_SEC(toStampActual) DIV 60) * 60
    ), '%H:%i:%s') AS rounded_time 
FROM `t`
Run Code Online (Sandbox Code Playgroud)

SQL小提琴

但这只会减少.如何根据秒数向上或向下舍入?

lur*_*ker 7

一个解决方案(SQL Fiddle)可能是:

SEC_TO_TIME(((TIME_TO_SEC(toStampActual)+30) DIV 60) * 60)
Run Code Online (Sandbox Code Playgroud)

在做之前只增加了一半60(值30)DIV.

或者,只使用ROUND(SQL小提琴)

SEC_TO_TIME((ROUND(TIME_TO_SEC(toStampActual)/60)) * 60)
Run Code Online (Sandbox Code Playgroud)