MYSQL将日期时间缩短为15分钟

时间:2013-10-10 08:35:42

标签: mysql

我想在MYSQL数据库表中将日期时间更新为15分钟。

例如:

如果dateTime为2013-10-08 10:36:00,我想将其转换为2013-10-08 10:30:00 同样,2013-10-08 10:22:002013-10-08 10:15:00

我看过this的答案,但它只将日期时间转换为秒数并仅返回时间,我也想要日期。

谢谢

5 个答案:

答案 0 :(得分:9)

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 |
+---------------------+---------------------+

答案 1 :(得分:7)

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

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_field获取时间作为子字符串,并将其替换为舍入时间。

如果您想更新日期时间,可以回复它并使用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))

答案 2 :(得分:1)

使用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

答案 3 :(得分:0)

使用与您关联的问题相同的方法,但请改用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 |
+---------------------+

答案 4 :(得分:0)

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

SELECT CONCAT(DATE(time_field), 
              ' ',
              SEC_TO_TIME((TIME_TO_SEC(time_field) DIV 900) * 900))
FROM `your_table`