SQL select 所有但不包括日期时间在午夜和早上 6 点之间的结果

SQL select all but exlude results when datetime is between midnight and 6am

我有一个 SQL 查询的基本问题,我找不到解决方案。我有一个 table,其中第一列是纪元时间戳,每 15 分钟保存一个新条目,我想 select 两个日期之间的所有内容。比如说一个月。这很简单,我只是使用

这样的常规查询

SELECT * from MyTable where date > UNIX_TIMESTAMP("2015-04-01 00:00:00") and date < UNIX_TIMESTAMP("2015-05-01 00:00:00"); .

但现在假设我想 select 整个月的所有条目,就像以前一样,但不包括在午夜和早上 6 点之间添加的条目。我怎么能那样做?我无法想象有任何简单直接的方法来做到这一点。我的查询是在 Perl 脚本中执行的,因此我可以执行一个循环,查询每天早上 6 点以上的所有结果,但它会是 "ugly".

谢谢!

(是的,我知道我将我的列命名为日期,日期实际上是一个函数,这很糟糕,我不会再重复了)

像这样的东西怎么样:

SELECT * 
from MyTable 
where mydate > UNIX_TIMESTAMP("2015-04-01 00:00:00") 
    and date < UNIX_TIMESTAMP("2015-05-01 00:00:00")
    and HOUR(time(mydate)) >= 6;

您可以使用time()函数提取日期时间列的时间部分,然后检查时间是否在早上6点之后。

SELECT * from MyTable 
where time(`date`) > '06:00:00'
and `date` > UNIX_TIMESTAMP("2015-04-01 00:00:00") 
and `date` < UNIX_TIMESTAMP("2015-05-01 00:00:00")

Sample SQL Fiddle

非常感谢您的回复,我使用了您的示例并设法让它们与我的 table 和我的数据一起工作。这是最终要求:

SELECT * from My Table
where time(FROM_UNIXTIME(`date`)) > '06:00:00'
and `date` > UNIX_TIMESTAMP("2015-05-01 00:00:00") 
and `date` < UNIX_TIMESTAMP("2015-05-02 00:00:00");

基本上第一个答案是正确的,只是 "where time..." 需要函数 FROM_UNIXTIME 才能工作。

再次感谢:)