我在表中有一个时间戳字段,如1429198764(2015年4月16日下午3:39(UTC)),我想计算此时间戳的周开始时间戳(假设一周)星期一开始)这将是1429142400(04/16/2015 @ 12:00 am(UTC))
对于当天开始的时间戳,我可以使用:
unix_timestamp(from_unixtime(timestamp, '%Y-%m-%d 00:00:00'))
对于小时的开始,我可以使用:
unix_timestamp(from_unixtime(timestamp, '%Y-%m-%d %H:00:00'))
但是对如何开始本周开始感到困惑。
答案 0 :(得分:1)
使用DATE
数据类型,返回上一个星期一的表达式相当简单(尽管可能不那么简单):
dt - INTERVAL WEEKDAY(dt) DAY
如果WEEKDAY
值是星期一,则dt
函数返回0,如果是星期二,则返回1
等等。
所以,如果dt
是星期二,我们只需要从中扣除1天,我们就会在上周一回来。 WEEKDAY
函数恰好返回一个非常方便我们使用的整数值。如果我们需要备份到Sunday
,那么我们可以使用MySQL DAYOFWEEK
函数。
相同的模式可以与DATETIME
和TIMESTAMP
数据类型一起使用。如果我们想要回到午夜,我们只需要一些额外的表达式来处理截断时间部分。
从整数值到MySQL TIMESTAMP
的转换增加了一些混乱,但模式保持不变。只需将上面示例中的dt
替换为返回MySQL TIMESTAMP
的表达式。