2015-04-16 39 views
0

我在表中有一個時間戳字段,如1429198764(2015年4月16日@ 3:39 pm(UTC)),我想計算一週開始的時間戳此時間戳(假設在週一的一週開始),這將是1429142400(2015年4月16日@上午12:00(UTC))mySQL開始一週的時間戳

一天開始的時間戳,我可以使用:
unix_timestamp(from_unixtime(timestamp, '%Y-%m-%d 00:00:00'))

而爲一小時開始,我可以使用:
unix_timestamp(from_unixtime(timestamp, '%Y-%m-%d %H:00:00'))

但如何獲得一週的開始難倒。

+2

http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html#function_dayofweek。鑑於此,你可以找出星期一應該是哪一天。 –

回答

1

隨着DATE數據類型,返回上週一的表現是相當簡單的(儘管也許不是那麼簡單):

dt - INTERVAL WEEKDAY(dt) DAY 

MySQL的WEEKDAY函數返回0,如果dt值是星期一,一個1如果它是星期二等。

因此,如果dt是星期二,我們只需要從中減去1天,而我們又回到了前一個星期一。 WEEKDAY函數恰好返回一個整數值,這對我們來說非常方便。如果我們需要備份到Sunday,那麼我們可以使用MySQL DAYOFWEEK函數代替。

相同的模式可以與DATETIMETIMESTAMP數據類型一起使用。如果我們想要備份到午夜,我們只需要一些額外的表達式來處理截斷時間部分。

從整數值到MySQL TIMESTAMP的轉換增加了一些混亂,但模式保持不變。在上面的例子中用你的表達式替換dt,返回MySQL TIMESTAMP

+0

非常感謝。他是同一船上其他人的結果SQL: '''UNIX_TIMESTAMP(DATE_FORMAT(DATE_SUB(from_unixtime(timestamp,'%Y-%m-%d 00:00:00'),INTERVAL WEEKDAY(from_unixtime(timestamp ,'%Y-%m-%d 00:00:00'))day),'%Y-%m-%d 00:00:00')) ''' – wkm