mysql从UTC转换为IST

时间:2015-03-20 09:32:03

标签: mysql date datetime

我有一个以UTC时间戳存储记录的数据库。我想用当地时间标准(IST)来获取它们。

通过参考一些推荐,我试过这样。

select date(convert_tz(sa.created_at,'+00:00','+05:30')) as date,count(*) as hits from session_acts sa, sessions s where sa.session_id = s.id and s.created_at between convert_tz('2015-03-12T11:33:00+00:00','+00:00','-05:30') and convert_tz('2015-03-13T11:33:00+00:00','+00:00','-05:30') group by date;

但它会导致

+------------+------+
| date       | hits |
+------------+------+
| 2015-03-12 |   94 |
| 2015-03-13 |   34 |
+------------+------+

我想只显示13日请求的点击数。哪里出错了??

2 个答案:

答案 0 :(得分:9)

IST比UTC早5.30小时,所以当IST第13次开始时,2015-03-13 : 00:00:002015-03-12 18:30:00在UTC

mysql> select convert_tz('2015-03-13T00:00:00+00:00','+00:00','-05:30') ;
+-----------------------------------------------------------+
| convert_tz('2015-03-13T00:00:00+00:00','+00:00','-05:30') |
+-----------------------------------------------------------+
| 2015-03-12 18:30:00                                       |
+-----------------------------------------------------------+
1 row in set, 1 warning (0.00 sec)

当13在IST结束时,即2015-03-13 : 23:59:592015-03-13 18:29:59在UTC

mysql> select convert_tz('2015-03-13T23:59:59+00:00','+00:00','-05:30') ;
+-----------------------------------------------------------+
| convert_tz('2015-03-13T23:59:59+00:00','+00:00','-05:30') |
+-----------------------------------------------------------+
| 2015-03-13 18:29:59                                       |
+-----------------------------------------------------------+

因此,您需要在IST中获取第13个数据,您需要在此日期范围内搜索数据。

所以情况如下 -

s.created_at 
between convert_tz('2015-03-13T00:00:00+00:00','+00:00','-05:30')
and convert_tz('2015-03-13T23:59:59+00:00','+00:00','-05:30');

并且由于您在选择时进行转换,因此它将返回所有第13个数据。

答案 1 :(得分:0)

select convert_tz('2015-03-13T00:00:00+00:00','+00:00','+05:30') ;
相关问题