7

我试图选择日期格式为 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

但无法让它工作

4

2 回答 2

13

你这里有两个问题:

  1. 您不能在 where 子句中引用列别名。相反,您必须在 where 子句中重复计算
  2. 使用TIME()函数提取数据时间的时间部分

解决这两个问题后,您将获得:

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

这更整洁:)

于 2011-08-07T16:37:00.790 回答
4

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

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')
于 2011-08-07T16:35:21.143 回答