UTC数据库中IST数据的每小时总和值

时间:2016-05-09 12:07:20

标签: mysql timezone

我在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 to 19:30,但此处我的查询仅计算18:30 to 19:0019:00 to 20:0020:00 to 21:00这不是准确值。

我想计算18:30 to 19:3019:30 to 20:30的值,以获取IST时间数据的准确度值。

如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

您还应该按组

转换日期
select sum(value) as value , hour(CONVERT_TZ(serverTime, '+00:00', '-05:30')) as hour
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 hour(CONVERT_TZ(serverTime, '+00:00', '-05:30'));

测试条件

select CONVERT_TZ('2016-05-03 00:00:01','+00:00', '-05:30') , 
       CONVERT_TZ('2016-05-03 10:45:24','+00:00', '-05:30')  from dual;

select CONVERT_TZ('2016-05-03 00:00:01','+00:00', '-05:30') ,  
       CONVERT_TZ('2016-06-03 01:00:24','+00:00', '-05:30')  from dual;

答案 1 :(得分:1)

IST,我假设你的意思是印度标准时间,它是UTC的5小时30分钟提前。作为固定偏移,它将是+05:30,而不是-05:30。你的结果是不正确的,因为你的标志是倒置的。

CONVERT_TZ函数接受以下任何一项:

  • 'SYSTEM'用于本地系统时区
  • 标准ISO 8601 format中的固定偏移量,其具有正的 East UTC的偏差,例如印度的'+05:30'或夏威夷的'-10:00'
  • 使用标准IANA/Olson TZDB identifiers命名时区,假设填充了时区表。印度是'Asia/Kolkata',美国东部时间是'America/New_York'等。使用此选项需要按the documentation填充mysql时区表。

通常,首选命名时区是因为它们可以适应由于夏令时和历史更改而产生的偏移变化。但是,印度自1942年以来一直固定在+05:30,并且在不久的将来不太可能发生变化,所以如果这是你需要的唯一的时区,使用固定偏移方法是合理的。处理。

另请注意,“IST”与许多time zone abbreviations一样,含糊不清。它可以指印度标准时间(+05:30),爱尔兰标准时间(+01:00)或以色列标准时间(+02:00)。另请注意,爱尔兰标准时间实际上是日光时区偏移,尽管其中包含名称“标准”。为避免混淆,请在将来引用IST时指定您的特定位置,并且不要指望计算机能够区分它们。