14

I want to update the datetime round to 15 minutes in a MYSQL database table.

For Example:

If the dateTime is 2013-10-08 10:36:00, I want to convert it into 2013-10-08 10:30:00 Similarly,2013-10-08 10:22:00 to 2013-10-08 10:15:00

I have seen this answer but it converts datetime into seconds and return time only, I want date as well.

Thanks

4

5 回答 5

18
SELECT NOW() x,FROM_UNIXTIME(FLOOR(UNIX_TIMESTAMP(NOW())/900)*900) y;
+---------------------+---------------------+
| x                   | y                   |
+---------------------+---------------------+
| 2013-10-10 09:50:20 | 2013-10-10 09:45:00 |
+---------------------+---------------------+
于 2013-10-10T08:47:03.193 回答
10

你看到的答案很有用,试试这个

SELECT SUBSTRING_INDEX(datetime_field, ' ', -1) AS old_time,SEC_TO_TIME((TIME_TO_SEC(datetime_field) DIV 900) * 900) AS rounded_time, datetime_field FROM yourtable

您可以从datetime_fieldas 子字符串中获取时间并将其替换为舍入时间。

如果你想更新日期时间,你可以回复它并使用update函数更新它:

UPDATE yourtable SET `datetime_field` =  REPLACE(datetime_filed,SUBSTRING_INDEX(datetime_field, ' ', -1),SEC_TO_TIME((TIME_TO_SEC(datetime_field) DIV 900) * 900))
于 2013-10-10T08:47:28.800 回答
5

使用 unix_timestamp 允许非常简单的算术,如果需要,将下面代码中的 15 更改为其他数字(例如 30)

select from_unixtime(round(unix_timestamp('2013-10-08 10:36:00')/(60*15))*(60*15)); 

= October, 08 2013 10:30:00+0000

select from_unixtime(round(unix_timestamp('2013-10-08 10:22:00')/(60*15))*(60*15)); 

= October, 08 2013 10:15:00+0000

见: http: //forums.mysql.com/read.php?20,131939,201089#msg-201089

于 2013-10-10T08:51:26.300 回答
2

使用与您链接的问题相同的方法,但改用UNIX_TIMESTAMP函数。这将向下或向上取整到最接近的 15 分钟,+ 450如果您只想向下取整,请删除该部分。

mysql> select FROM_UNIXTIME(((UNIX_TIMESTAMP('2013-08-07 12:05') + 450) DIV 900) * 900) AS roundtime;
+---------------------+
| roundtime           |
+---------------------+
| 2013-08-07 12:00:00 |
+---------------------+
于 2013-10-10T08:44:11.280 回答
1

您可以通过将日期连接到时间来修改您找到的答案(如果您对此感到满意):

SELECT CONCAT(DATE(time_field), 
              ' ',
              SEC_TO_TIME((TIME_TO_SEC(time_field) DIV 900) * 900))
FROM `your_table`  
于 2013-10-10T08:46:50.633 回答