我接触的绝大部分PHP的Web项目,在存时间时,都是存的Unix时间戳,字段类型是int(10),显示的东西类似于1108879309这种数字。
批量修改这种Unix时间戳的MySQL语句是:
UPDATE `table` SET addtime = unix_timestamp(DATE_SUB(from_unixtime(addtime), INTERVAL 1 MONTH)) WHERE 1
解释上面MYSQLSQL语句中涉及到的SQL函数:
1,用FROM_UNIXTIME()
函数将Unix时间戳转换成 YYYY-MM-DD H:I
这种常见的格式,语法:FROM_UNIXTIME(unix_timestamp,format)
2,用DATE_SUB()
函数从日期中减去指定的时间间隔,语法:DATE_SUB(date,INTERVAL expr type)
;如果要加上指定的时间间隔,用DATE_ADD(date,INTERVAL expr type)
DATE_SUB()
和DATE_ADD()
函数不能直接操作Unix时间戳,所以用FROM_UNIXTIME()
转换了一下
3,把Unix时间戳转换成 YYYY-MM-DD H:I
这种格式后,减去指定的时间间隔后,肯定要再转换成Unix时间戳才能更新到数据库中,用unix_timestamp()
函数
以上三个函数嵌套使用,就解决了问题。
再补充下Unix时间戳的知识:
1,Unix时间戳是指从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。
2,对照表
时间 | 秒 |
---|---|
1分钟 | 60 |
1小时 | 3600 |
1天 | 86400 |
1周 | 604800 |
1月(30.44天) | 2629743 |
1年(365.24天) | 31556736 |