我想在MYSQL数据库表中将日期时间更新为15分钟。
例如:
如果dateTime为2013-10-08 10:36:00
,我想将其转换为2013-10-08 10:30:00
同样,2013-10-08 10:22:00
到2013-10-08 10:15:00
我看过this的答案,但它只将日期时间转换为秒数并仅返回时间,我也想要日期。
谢谢
答案 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`