7

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

しかし、それを機能させることはできません

4

2 に答える 2

13

ここには 2 つの問題があります。

  1. where 句で列のエイリアスを参照することはできません。代わりに、where 句で計算を繰り返す必要があります。
  2. 関数を使用してTIME()、データ時間の時間部分を抽出します

これら 2 つの問題に対処すると、次のことが得られます。

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 で time 値が実際に必要ない場合は、それを削除して where 句に含めることができます。また、それがHOUR()より適している場合は、関数を使用できます。これら 2 つの変更により、クエリは次のように簡素化されます。

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

これはずっときれいです:)

于 2011-08-07T16:37:00.790 に答える
4

「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')
于 2011-08-07T16:35:21.143 に答える