[英]MySQL query with specific timezone
我有一個為我的 Laravel/PHP 應用程序存儲數據的數據庫。 所有數據都以 UTC 格式存儲在數據庫中。
我正在編寫一個查詢來獲取按日期和小時分組的數據,以便我可以 plot 圖表上的數據。
我們的 UI 顯示America/Los_Angeles
時區的報告數據。
我要做的是獲取最近三天的數據,但根據America/Los_Angeles
的報告時區進行查詢。
要獲得BETWEEN
日期,我使用以下
$from = now()
->startOfDay()
->subDays(3)
->timezone('America/Los_Angeles');
$to = now()
->endOfDay()
->timezone('America/Los_Angeles');
這工作正常。 因此,下一步是將數據分組,但不將其分組到列 data 上,因為那將是UTC
。 我想組在Los_Angeles
時區。 所以我正在做下面的事情。
SELECT
DATE(CONVERT_TZ(created_at, '+00:00', '-07:00')) AS grouped_date,
HOUR(CONVERT_TZ(created_at, '+00:00', '-07:00')) AS grouped_hour,
count(*) AS requests
FROM
`advert_requests`
WHERE
created_at BETWEEN '2022-09-09 17:00:00' AND '2022-09-13 16:59:59'
GROUP BY
grouped_date,
grouped_hour
我遇到的隨機問題是分組數據從2022-09-09
年 9 月 9 日10:00
開始,我不知道為什么。
在2022-09-09 17:00:00 America/Los_Angeles
開始BETWEEN
是2022-09-10 00:00:00 UTC
所以在created_at
上執行CONVERT_TZ
時,分組數據不應該從0
開始嗎?
有任何想法嗎?
當然,這並不像在我運行報告SELECT
查詢的會話中將時區設置為報告時區那樣簡單。
所以我可以將其他所有內容保留為UTC
。 我的應用程序是UTC
並在 php/application.xml 中處理時區轉換。 我的數據庫設置為UTC
。 我的 MySQL INSERT
等都是UTC
。 然后,當我想使用我們的固定報告時區America/Los_Angeles
查詢要在 UI 中顯示的任何內容時,我可以在運行SELECT
查詢之前設置它嗎?
SET time_zone = '-07:00';
// In the Laravel framework
// DB::update('SET time_zone = ?', ['-07:00']);
接着
SELECT
DATE(created_at) AS grouped_date,
HOUR(created_at) AS grouped_hour,
count(*) AS requests
FROM
`advert_requests`
WHERE
created_at BETWEEN '2022-09-10 00:00:00'
AND '2022-09-13 23:59:59'
GROUP BY
grouped_date,
grouped_hour
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.