每天在12:00:00和18:00:00之间的时间间隔内选择记录

时间:2011-08-07 15:54:49

标签: mysql date intervals between

我试图在dateformat 2011-08-01中选择时间戳表中的所有记录 -

12:00:00

使用以下代码:

SELECT f.`fly_reg`, RIGHT(f.`start_tid`,8) AS st, f.`start_hight`
FROM vbsk_dk_02.fab_master_flyvedata f 
Where st between 12:00:00 AND 18:00:00

但无法让它发挥作用

2 个答案:

答案 0 :(得分:8)

这里有两个问题:

  1. 您不能在where子句中引用列别名。相反,您必须在where子句
  2. 中重复计算
  3. 使用TIME()功能提取数据时间的时间部分
  4. 解决这两个问题后,你得到:

    select
        f.fly_reg,
        TIME(f.start_tid) AS st,
        f.start_hight 
        FROM vbsk_dk_02.fab_master_flyvedata f 
    where TIME(f.start_tid) between '12:00:00' AND '18:00:00'
    

    作为一个选项,如果你实际上不需要select中的时间值,你可以删除它,并将它放在where子句中。此外,如果更适合,您可以使用HOUR()功能。通过这两项更改,您的查询将简化为:

    select *
    FROM vbsk_dk_02.fab_master_flyvedata
    where HOUR(f.start_tid) between 12 and 18
    

    这是一个很整洁:)

答案 1 :(得分:3)

如果您已将时间存储在“Timestamp”或“Datetime”类型的列中,则可以选择小时数之间的记录范围,如下所示:

select * from testTable where hour(`timeStampCol`) >= 12 and hour(`timeStampCol`) <= 18

我用这个设置测试了这个:

CREATE TABLE `cm`.`testTable` (
  `timeStampCol` TIMESTAMP  NOT NULL,
  `dateTimeCol` DATETIME  NOT NULL
)
ENGINE = MyISAM
COMMENT = 'Delete this table';

insert into testTable values ('2010-01-01 14:52:00', '2010-01-01 14:52:00')
insert into testTable values ('2010-01-01 19:48:00', '2010-01-01 19:48:00')