首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mySQL在一天中经过午夜的几个小时之间收集数据,并增加数据

问mySQL在一天中经过午夜的几个小时之间收集数据,并增加数据
EN

Stack Overflow用户
提问于 2014-10-01 18:02:28
回答 1查看 1.4K关注 0票数 0

我正在尝试从数据库中获取数据,从晚上8点(比如今天)到明天凌晨2点。

在同一天,我一直在使用诸如where hour(date_field)>=20 and hour(date_field) <23这样的子句来获取数据。

这里date_field是datetime

我想要的只是能够告诉SQL在今天晚上8点以后获取数据,增加datefield,然后获取数据直到明天凌晨2点。

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2014-10-01 18:20:58

根据日期时间范围检索行的正常模式是在裸列上执行比较,将列值与从表达式派生的常量进行比较。

要获取单个连续范围的行,例如,今天晚上8点到明天凌晨2点:

代码语言:javascript
复制
  WHERE t.date_column >= DATE(NOW()) + INTERVAL 20 HOUR
    AND t.date_column  < DATE(NOW()) + INTERVAL 26 HOUR

要解压缩这一点: NOW()返回当前的日期时间,DATE()函数将时间部分截断到午夜,然后我们将返回足够的小时以获得“今天晚上8点”,或者添加足够的时间来获取“明天凌晨2点”。

如果你的意思是检索多个“晚上8点到凌晨2点”的时段,整整几天。

首先,您希望检索date_column的上限和下限(除非您希望每个可能的日期)。

代码语言:javascript
复制
 WHERE t.date_column >= '2014-08-01 20:00:00'
   AND t.date_column  < '2014-10-02 02:00:00'

由此,我们需要过滤掉所有不在晚上8点到凌晨2点之间的行。这样做的一个方便的方法是从datetime中“减去”两个小时,并检查每小时>= 6点。

代码语言:javascript
复制
   AND HOUR(t.date_column + INTERVAL -2 HOUR) >= 18

请注意,涉及date_column的表达式将需要对表中的每一行进行计算,除非有其他谓词将行过滤掉。有了合适的索引,MySQL可以对表单date_column >= const和date_column < const的谓词使用索引范围扫描操作。(当列被包装在函数或表达式中时,它不能这样做。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26147672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档