我的数据库在 UTC 时区和 UTC 时间插入数据。我想对 IST 时间数据的所有值求和并按小时分组。如下所示,
id data_id value serverTime
1 2 100 2016-05-02 18:30:54
2 2 100 2016-05-02 18:45:54
4 2 200 2016-05-02 19:00:54
5 2 100 2016-05-02 19:15:54
6 2 100 2016-05-02 19:30:54
7 2 100 2016-05-02 19:40:54
查询
select sum(value) as value, serverTime as date
from Data_table
where data_id=2
and serverTime between CONVERT_TZ('2016-05-03 00:00:01','+00:00', '-05:30')
and CONVERT_TZ('2016-05-03 10:45:24','+00:00', '-05:30')
group by year(date),month(date),week(date),day(date),hour(date);
上面的查询给出的结果是:
200
500
但期望输出:
600
100
因为 IST 12 AM = UTC- 05:30
这意味着 18:30 到 19:30
但这里我的查询只计算 18:30 到 19 :00
、19:00 到 20:00
、20:00 到 21:00
这不是准确值。
我想计算 18:30 到 19:30
和 19:30 到 20:30
的 IST 时间数据精度值。
如何解决?
最佳答案
IST
,我假设您指的是印度标准时间,比 UTC 早 5 小时 30 分钟。作为固定偏移量,这将是 +05:30
,而不是 -05:30
。您的结果不正确,因为您的符号倒置了。
CONVERT_TZ
函数接受任何:
'SYSTEM'
本地系统时区- 标准 ISO 8601 format 中的固定偏移量,它具有 UTC 的正偏移量 East,例如印度的
'+05:30'
或'-10: 00'
代表夏威夷。 - 命名时区,使用标准 IANA/Olson TZDB identifiers ,假设时区表已填充。印度的时间是
'Asia/Kolkata'
,美国东部时间是'America/New_York'
,等等。使用此选项需要根据 the documentation 填充 mysql 时区表。
一般来说,命名时区是首选,因为它们可以适应由于夏令时和历史变化而导致的偏移量变化。然而,印度自 1942 年以来一直固定在 +05:30,并且在不久的将来不太可能改变,因此如果这是您需要的唯一时区,使用固定偏移方法是合理的处理。
另请注意,与许多 time zone abbreviations 一样,“IST”是不明确的。它可以表示印度标准时间 (+05:30)、爱尔兰标准时间 (+01:00) 或以色列标准时间 (+02:00)。另请注意,爱尔兰标准时间实际上是一个夏令时 时区偏移量,尽管其中有名称“Standard”。为避免混淆,请在以后提及 IST 时指定您的具体位置,不要指望计算机能够区分它们。
关于mysql - UTC 数据库中 IST 数据按小时求和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37115418/