Mysql 当datetime介于午夜和早上6点之间时,SQL选择除exlude以外的所有结果

Mysql 当datetime介于午夜和早上6点之间时,SQL选择除exlude以外的所有结果,mysql,datetime,intervals,Mysql,Datetime,Intervals,我有一个SQL查询的基本问题,我找不到解决方案。我有一个表,其中第一列是一个历元时间戳,每15分钟保存一个新条目,我想选择两个日期之间的所有实体。比如说一个月。这很简单,我只使用一个常规查询,比如 从MyTable中选择*,其中日期>UNIX_时间戳(“2015-04-01 00:00:00”)和日期UNIX\u时间戳(“2015-04-01 00:00:00”) 日期=6; 像这样的东西怎么样: SELECT * from MyTable where mydate > UNIX_TI

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

从MyTable中选择*,其中日期>UNIX_时间戳(“2015-04-01 00:00:00”)和日期

但是现在让我们假设我想像以前一样选择整个月的所有条目,但不包括在午夜到早上6点之间添加的条目。我怎么能这么做?我无法想象有任何简单直接的方法来做这件事。我的查询是在一个Perl脚本中执行的,因此我可以做一个循环,每天早上6点以上查询所有结果,但这将是“丑陋的”

谢谢


(是的,我知道我将我的列命名为date,date实际上是一个函数,很糟糕,我不会再编辑它了)

类似这样的东西怎么样:

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;
选择*
从MyTable
其中mydate>UNIX\u时间戳(“2015-04-01 00:00:00”)
日期=6;

像这样的东西怎么样:

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;
选择*
从MyTable
其中mydate>UNIX\u时间戳(“2015-04-01 00:00:00”)
日期=6;
您可以使用
time()
函数提取datetime列的时间部分,然后检查时间是否在上午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")
从MyTable中选择*
where time(`date`)>'06:00:00'
和'date`>UNIX\u时间戳(“2015-04-01 00:00:00”)
和“日期”

您可以使用
time()
函数提取datetime列的时间部分,然后检查时间是否在上午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")
从MyTable中选择*
where time(`date`)>'06:00:00'
和'date`>UNIX\u时间戳(“2015-04-01 00:00:00”)
和“日期”

非常感谢您的回复,我使用了您的示例,并设法使em与我的表格和数据一起工作。这是最后的请求:

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");
从我的表格中选择*
其中时间(FROM_UNIXTIME(`date`)>'06:00:00'
和'date`>UNIX\u时间戳(“2015-05-01 00:00:00”)
和“日期”
基本上,第一个答案是正确的,只是“where time…”需要_UNIXTIME的函数才能工作


再次感谢:)

非常感谢您的回复,我使用了您的示例,并设法使em与我的表格和数据一起工作。这是最后的请求:

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");
从我的表格中选择*
其中时间(FROM_UNIXTIME(`date`)>'06:00:00'
和'date`>UNIX\u时间戳(“2015-05-01 00:00:00”)
和“日期”
基本上,第一个答案是正确的,只是“where time…”需要_UNIXTIME的函数才能工作


再次感谢:)

似乎不起作用,奇怪的是它在你的小提琴上起作用。我收到了很多警告:mysql>从MyTable中选择*,其中时间(日期)>'06:00:00'和日期>UNIX_时间戳(“2015-05-05 00:00:00”)和日期<(“2015-05-06 00:00:00”)由eqt分组;空集,65535个警告(0.06秒)必须是
date
而不是date。date是一个mysql函数,您需要使用`to say“use the date field,not the function”@TuncayGöncüoğlu不,mysql允许使用date作为标识符而不加引号,即使出于向后兼容的原因,date是一个关键字。不过,最好引用它(或者完全使用另一个名称)。@user2407268将日期与unix_时间戳进行比较有效吗?也许你需要用日期文字来代替?看这把小提琴:似乎不起作用,奇怪,因为它在你的小提琴上起作用。我收到了很多警告:mysql>从MyTable中选择*,其中时间(日期)>'06:00:00'和日期>UNIX_时间戳(“2015-05-05 00:00:00”)和日期<(“2015-05-06 00:00:00”)由eqt分组;空集,65535个警告(0.06秒)必须是
date
而不是date。date是一个mysql函数,您需要使用`to say“use the date field,not the function”@TuncayGöncüoğlu不,mysql允许使用date作为标识符而不加引号,即使出于向后兼容的原因,date是一个关键字。不过,最好引用它(或者完全使用另一个名称)。@user2407268将日期与unix_时间戳进行比较有效吗?也许你需要用日期文字来代替?看这把小提琴:我一秒钟前把它倒过来了,我只把0-6包括在内,而不是把0-6排除在外——对此我很抱歉。上面的内容会更准确,虽然它实际上会包括早上6点。也许它不起作用,因为事实上我的表格叫做date and note mydate,所以因为date是一个函数,它会在小时内做一些奇怪的事情(时间问题。我会尝试引用date来表示它是一列,我会告诉你它是怎么倒过来的。一秒钟前,我只包含了0-6,而不是排除了0-6,对此我很抱歉。上面的内容会更准确,尽管它实际上包含了6点的时间。也许它不起作用,因为实际上我的表被称为date而不是datee mydate,因为date是一个函数,所以它会对小时(时间)做一些奇怪的事情。我会尝试引用date来表示它是一个列,然后我会告诉你们它是如何运行的