2013-10-18 35 views
0

根據交易表跟蹤一天中的總銷售額很容易。當前代碼使用BETWEEN並針對每個日期執行查詢。我不太喜歡這一點,特別是當日期範圍在幾個月內。按本地化日期分組

現在,交易的date_created字段的類型爲timestamp。和寫作就像作品的查詢,除了一兩件事:

SELECT DATE(date_created), sum(sale_total) 
FROM 
    transaction 
WHERE DATE(date_created) BETWEEN ? and ? 
GROUP BY DATE(date_created) 

它精美的作品,除了數據庫定位於GMT,我在這裏CST。因此,在7:00 PM CST之後發生的任何交易將被「推送」到第二天,因爲它在第二天存儲在GMT中。

我想我的問題是2倍

  • 我將如何着手GROUP BY本地化的日期?
  • 在MySQL中是否有嚴格的方式知道我想在查詢中使用不同的時區?或者這將不得不進行手動調整?

回答

1

TIMESTAMP字段以UTC形式存儲在引擎蓋下。如果你的數據是在TIMESTAMP領域,你可以設置MySQL的時區使用:SET time_zone = 'America/New_York';

如果你已經在存儲領域DATETIME數據,它們會存儲在MySQL的系統時區,這樣的轉換將是對你。