我正在尝试从数据库中获取数据,从晚上8点(比如今天)到明天凌晨2点。
在同一天,我一直在使用诸如where hour(date_field)>=20 and hour(date_field) <23这样的子句来获取数据。
这里date_field是datetime
我想要的只是能够告诉SQL在今天晚上8点以后获取数据,增加datefield,然后获取数据直到明天凌晨2点。
任何帮助都将不胜感激。
发布于 2014-10-01 18:20:58
根据日期时间范围检索行的正常模式是在裸列上执行比较,将列值与从表达式派生的常量进行比较。
要获取单个连续范围的行,例如,今天晚上8点到明天凌晨2点:
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的上限和下限(除非您希望每个可能的日期)。
WHERE t.date_column >= '2014-08-01 20:00:00'
AND t.date_column < '2014-10-02 02:00:00'由此,我们需要过滤掉所有不在晚上8点到凌晨2点之间的行。这样做的一个方便的方法是从datetime中“减去”两个小时,并检查每小时>= 6点。
AND HOUR(t.date_column + INTERVAL -2 HOUR) >= 18请注意,涉及date_column的表达式将需要对表中的每一行进行计算,除非有其他谓词将行过滤掉。有了合适的索引,MySQL可以对表单date_column >= const和date_column < const的谓词使用索引范围扫描操作。(当列被包装在函数或表达式中时,它不能这样做。)
https://stackoverflow.com/questions/26147672
复制相似问题