我在postgres上运行了一个带有TIME_ZONE='America/New_York'
和USE_TZ = True
的Django API应用程序。
对于每日报告,我需要查询另一个数据库,MySQL,并比较postgres数据库中的记录以检查一些更新。它们应包含相同数量的结果。然而,MySQL DB的时区是UTC
。如何对MySQL DB执行SELECT
查询以使其与我的postgres DB上的相同日期范围匹配?
实施例: 这两个查询应返回相同数量的结果
# Django/Postgres with TIME_ZONE='America/New_York'`
MyObject.objects.filter(created_on__date=date(2016, 9, 17))
# External MySQL Databse in UTC
sql.execute('SELECT * from MY_TABLE where created_on BETWEEN "2016-09-17" AND "2016-09-18"')
答案 0 :(得分:2)
您需要的是将MySQL中的日期转换为匹配America/New_York
时区。
实现这一目标的功能是CONVERT_TZ()
,因为您首先需要指定时区,所以需要设置time zone tables。
如果您不确定命名时区是否可用,请查询以下问题 - 如果它返回零,则该表为空,因此使用命名时区不可用,您需要填充它们(我已经提到了上面文档的链接)。
SELECT COUNT(*) FROM mysql.time_zone_name;
mysql_tzinfo_to_sql
用于填充时区表。
如果您的时区不是一个移动的时区,那么您可以通过明确键入时间差来采用不太安全,硬编码的方法(不推荐):
mysql> SELECT CONVERT_TZ('2016-09-17 10:00:00','+00:00','+06:00');
-> '2016-09-17 16:00:00' -- Result