加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – Mysql时区并从一天中选择行

发布时间:2020-12-13 22:04:10 所属栏目:PHP教程 来源:网络整理
导读:我使用 MySQL DATETIME列来存储日期和时间.时间.日期为UTC.我想从一天中选择项目.我现在在做什么: SELECT * FROM data WHERE DATE(CONVERT_TZ(datetime,'UTC','Australia/Sydney')) = '2012-06-01' 请注意,时区取决于用户 问题是桌面增长很慢. 有没有解决方
我使用 MySQL DATETIME列来存储日期和时间.时间.日期为UTC.我想从一天中选择项目.我现在在做什么:

SELECT * FROM data WHERE DATE(CONVERT_TZ(datetime,'UTC','Australia/Sydney')) = '2012-06-01'

请注意,时区取决于用户

问题是桌面增长很慢.
有没有解决方法如何让它更快?

解决方法

目前,您的查询必须计算数据库的每一行的转换.你可能可以通过转换相反的方式使事情变得更好,这样转换只发生一次(或实际上两次,因为你必须形成一个范围).那么适当的日期时间索引应该会让事情变得非常快.

SELECT * FROM data
WHERE datetime BETWEEN CONVERT_TZ('2012-06-01 00:00:00','Australia/Sydney','UTC')
                   AND CONVERT_TZ('2012-06-01 23:59:59','UTC')

或者如果你担心23:60:00闰秒没有被任何查询匹配,你可以这样做

SELECT * FROM data
WHERE datetime >= CONVERT_TZ('2012-06-01','UTC')
  AND datetime < CONVERT_TZ('2012-06-01' + INTERVAL 1 DAY,'UTC')

在后一种形式中,您不必添加PHP端的小时数,而是可以简单地将日期作为字符串参数传递.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读