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

时间:2014-09-09 14:43:42

标签: mysql datetime

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

|toStampActual      |
|-------------------|
|2014-09-09 13:00:00|
|2014-09-09 13:15:03|
|2014-09-09 13:14:55|

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

|toStampActual      |
|-------------------|
|2014-09-09 13:00:00|
|2014-09-09 13:15:00|
|2014-09-09 13:15:00|

基本上是最接近的一分钟......任何大于:30秒的东西都会上升,任何东西都会减少。

我找到了这个答案https://stackoverflow.com/a/19291128/99401并将SQL更改为

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

SQL Fiddle

但这只是圆了下来。如何根据秒数向上或向下舍入?

3 个答案:

答案 0 :(得分:7)

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

SEC_TO_TIME(((TIME_TO_SEC(toStampActual)+30) DIV 60) * 60)

在执行60之前,只需添加30的一半(DIV的值)。

或者,只需使用ROUNDSQL Fiddle

SEC_TO_TIME((ROUND(TIME_TO_SEC(toStampActual)/60)) * 60)

答案 1 :(得分:0)

四舍五入到5分钟的示例

如果您的 public void onMapReady(GoogleMap googleMap) { mMap = googleMap; mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); mMap.setTrafficEnabled(false); mMap.setIndoorEnabled(false); mMap.setBuildingsEnabled(false); mMap.getUiSettings().setZoomControlsEnabled(true); } filed,例如01:41:00
包含时间TIME

的文件

第一步:
我们需要知道包含分钟的最后一个字符,但只有fit.avergeTime, 例如,如果时间是01:41:00,我们只想获取分钟1而不是41 我们得到的结果是

single minutes

然后我们使用case / when并添加正确的分钟数

SUBSTRING(fit.avergeTime, 5, 1)

希望这有帮助吗?

答案 2 :(得分:-3)

update yourtable set new_start_time = CASE substring(new_start_time,5,1)+0
WHEN 0 THEN  addtime(new_start_time,'00:00') 
WHEN 1 THEN addtime(new_start_time,'-00:01') 
WHEN 2 THEN addtime(new_start_time,'-00:02') 
WHEN 3 THEN  addtime(new_start_time,'00:02') 
WHEN 4 THEN  addtime(new_start_time,'00:01') 
WHEN 5 THEN  addtime(new_start_time,'00:00') 
WHEN 6 THEN  addtime(new_start_time,'-00:01') 
WHEN 7 THEN  addtime(new_start_time,'-00:02') 
WHEN 8 THEN  addtime(new_start_time,'00:02') 
WHEN 9 THEN  addtime(new_start_time,'00:01') END