我在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:00
,19:00 to 20:00
,20:00 to 21:00
这不是准确值。
我想计算18:30 to 19:30
和19:30 to 20:30
的值,以获取IST时间数据的准确度值。
如何解决这个问题?
答案 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'
用于本地系统时区'+05:30'
或夏威夷的'-10:00'
。'Asia/Kolkata'
,美国东部时间是'America/New_York'
等。使用此选项需要按the documentation填充mysql时区表。通常,首选命名时区是因为它们可以适应由于夏令时和历史更改而产生的偏移变化。但是,印度自1942年以来一直固定在+05:30,并且在不久的将来不太可能发生变化,所以如果这是你需要的唯一的时区,使用固定偏移方法是合理的。处理。
另请注意,“IST”与许多time zone abbreviations一样,含糊不清。它可以指印度标准时间(+05:30),爱尔兰标准时间(+01:00)或以色列标准时间(+02:00)。另请注意,爱尔兰标准时间实际上是日光时区偏移,尽管其中包含名称“标准”。为避免混淆,请在将来引用IST时指定您的特定位置,并且不要指望计算机能够区分它们。