我有一个以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日请求的点击数。哪里出错了??
答案 0 :(得分:9)
IST比UTC早5.30小时,所以当IST第13次开始时,2015-03-13 : 00:00:00
其2015-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:59
其2015-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') ;