我正在尝试将毫秒精度的DATETIME,即DATETIME(3)舍入到最接近的分钟。例如:
2020-07-27 17:33:59.954 => 2020-07-27 17:34:00.000
2020-07-27 17:42:58.799 => 2020-07-27 17:42:59.000
答案 0 :(得分:2)
mysql> select now(3), from_unixtime(floor((unix_timestamp(now(3))+30)/60)*60) as nearest_minute;
+-------------------------+---------------------+
| now(3) | nearest_minute |
+-------------------------+---------------------+
| 2020-07-31 18:46:22.518 | 2020-07-31 18:46:00 |
+-------------------------+---------------------+
答案 1 :(得分:1)
CREATE TABLE Table1 (`dt` datetime(6)) ; INSERT INTO Table1 (`dt`) VALUES ('2020-07-27 17:33:59.954'), ('2020-07-27 17:42:58.799') ;
SELECT `dt` ,CAST(`dt` AS DATETIME) FROM Table1
dt | CAST(`dt` AS DATETIME) :------------------------- | :--------------------- 2020-07-27 17:33:59.954000 | 2020-07-27 17:34:00 2020-07-27 17:42:58.799000 | 2020-07-27 17:42:59
db <>提琴here
答案 2 :(得分:0)
这是我想出的一个不太令人满意的解决方案:
CREATE FUNCTION timestamp_to_nearest_minute (t DATETIME)
RETURNS DATETIME DETERMINISTIC
RETURN
CASE
WHEN CAST(EXTRACT(MICROSECOND FROM t) AS DECIMAL(11,3)) / 1000.0 < 500
THEN
DATE_SUB(t, INTERVAL CAST(EXTRACT(MICROSECOND FROM t) AS DECIMAL(11,3)) MICROSECOND)
ELSE
DATE_ADD(t, INTERVAL 1000000.0 - CAST(EXTRACT(MICROSECOND FROM t) AS DECIMAL(11,3)) MICROSECOND)
END
;