1

イントロ:たとえば、時間の列を含むテーブルのあるデータベースがあります

08:30:00
08:45:00
09:30:00
12:20:00
...
18:00:00

この列のデータ型は「時間」です。質問:SQLを使用してすべての時間を選択することは可能ですか[たとえば、10:00:00、10:30:00、11:00:00など]リストにない08:00:00から18:00:00までの範囲?

編集:まあ、それを考えた後、あなたが[ありがとう!]は完全に完璧ではありません[まあそれは私がuに与えた詳細で完璧です:)]。私のアプリケーションでは、ユーザーが[このバージョンのアプリでは]30分かかる予約を行うことができます。私が最初のトピックでuに与えた時間のコラムは、11:45:00や13:05:00などの12:15:00と13で終了する時間のカバーミーティングを行わなかったため、非常に楽観的です。 :35:00なので、この追加のテーブルに何時間入れることができるかは上からわかりません。

4

3 に答える 3

1

まず、元のテーブルに見つからない場合にレポートするすべての時間を含む日付T_REFの列を持つテーブルを作成します。COL_HR

MYSQLでは、このようなことを行うとうまくいくはずです

SELECT DATE_FORMAT(COLUMN_NAME, '%H') FROM T_REF
MINUS
SELECT DATE_FORMAT(COLUMN_NAME, '%H') FROM ORIG_TABLE

これにより、時間のみを取得して比較し、テーブルにない時間を報告します(ORIG_TABLE)。

于 2012-05-09T16:30:39.797 に答える
1

醜いですが、可能です:

CREATE TABLE thours (h time);
INSERT INTO thours VALUES
    ('08:30:00'), ('08:45:00'), ('09:30:00'),
    ('12:20:00'), ('18:00:00');

CREATE VIEW hrange AS
SELECT 8 as h UNION ALL SELECT  9 UNION ALL SELECT 10 UNION ALL
SELECT 11     UNION ALL SELECT 12 UNION ALL SELECT 13 UNION ALL
SELECT 14     UNION ALL SELECT 15 UNION ALL SELECT 16 UNION ALL
SELECT 17     UNION ALL SELECT 18;

CREATE VIEW hours AS
SELECT cast(concat(cast(h as char), ':00:00') as time) AS h FROM hrange
UNION ALL
SELECT cast(concat(cast(h as char), ':30:00') as time)
  FROM hrange WHERE h < 18
 ORDER BY 1;

SELECT h.h AS ranged, t.h AS scheduled
  FROM hours h
  LEFT join thours t ON h.h = t.h;

クエリに追加WHERE t.h IS NULLすると、必要な時間のリストが表示されます。

MySQLはシリーズを動的に生成できないため、ビューを作成しました。 ここで試してみてください

于 2012-05-09T17:07:49.980 に答える
0

あなたは1時間半ごとに見つけることだけを期待していますか?あなたが見つけることを期待している時間と見つけないことを期待している時間を知らずに、私は次のことを提案します:

可能なすべての時刻を含む別のテーブルを作成してから、クエリを実行して、元のテーブルに存在しない時刻を見つけます。

于 2012-05-09T16:27:45.940 に答える