我在表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`
但这只是圆了下来。如何根据秒数向上或向下舍入?
答案 0 :(得分:7)
一个解决方案(SQL Fiddle)可能是:
SEC_TO_TIME(((TIME_TO_SEC(toStampActual)+30) DIV 60) * 60)
在执行60
之前,只需添加30
的一半(DIV
的值)。
或者,只需使用ROUND
(SQL 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