mysql-如何每天将查询结果限制为一定时间范围?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql-如何每天将查询结果限制为一定时间范围?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1746字,纯文字阅读大概需要3分钟。
内容图文
![mysql-如何每天将查询结果限制为一定时间范围?](/upload/InfoBanner/zyjiaocheng/885/8a1ceb5e2bcf4977b671924a7c324732.jpg)
我有一个显示广告系列中广告的应用.我将每个广告系列的广告集的显示限制为每个广告系列的特定日期范围.我的“广告系列”表如下所示:
campaigns
id : integer
start_date : date
end_date : date
现在,我需要能够选择每天将广告系列广告的显示限制为特定时间范围.所以现在我的桌子看起来像
campaigns
id : integer
start_date : date
end_date : date
start_time : time, default: null
end_time : time, default: null
因此,我的[MySQL]查询如下所示:
SELECT
ads.*
FROM
ads
INNER JOIN campaigns ON campaigns.id = ads.campaign_id
WHERE
campaigns.start_date <= "2014-08-05" AND
campaigns.end_date >= "2014-08-05" AND
campaigns.start_time <= "13:30"
campaigns.end_time >= "13:30";
(日期和时间实际上是使用当前日期/时间注入的.)
这很好.但是,因为我以UTC时间存储start_time和end_time,所以有时end_time早于start_time.例如,在数据库中:
start_time = 13:00 (08:00 CDT)
end_time = 01:00 (20:00 CDT)
如何调整查询(甚至使用代码)以解决此问题?
解决方法:
这个问题比看起来要难,因为广告系列或比较时间跨度都可能超出日期范围.然后,还有另外的并发症.如果广告系列说它一直运行到凌晨1:00,那么结束日期是当前日期还是下一个日期?换句话说,以您的示例为例,在2014-08-06上午1:00应该算作2014-08-05.
因此,我的建议是切换到本地时间.如果您的广告系列没有持续到午夜,那么这应该可以解决您的问题.
如果您只关心午夜的广告系列本身,则可以执行以下操作:
WHERE campaigns.start_date <= '2014-08-05' AND
campaigns.end_date >= '2014-08-05' AND
((campaigns.start_time <= campaigns.end_time and
campaigns.start_time >= '13:00' and
campaigns.end_time <= '18:00'
) or
(campaigns.start_time >= campaigns.end_time and
(campaigns.start_time >= '13:00' or
campaigns.end_time <= '18:00'
)
)
请注意,当end_time大于开始时间时,则希望时间大于开始时间或小于结束时间.在正常情况下,您希望时间大于开始时间而小于结束时间.
如果您只关心比较时间段,则可以执行类似的操作.将两者结合起来似乎很复杂.
内容总结
以上是互联网集市为您收集整理的mysql-如何每天将查询结果限制为一定时间范围?全部内容,希望文章能够帮你解决mysql-如何每天将查询结果限制为一定时间范围?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。