返されるすべての時間を含む行ソースが必要です。次に、JOIN操作を使用して、返される行を選択できます。
このようなテーブルがある場合:
CREATE TABLE cal (tm TIME NOT NULL PRIMARY KEY) ENGINE=InnoDB ;
INSERT INTO cal (tm) VALUES ('00:00:00'),('00:30:00');
INSERT INTO cal (tm) SELECT ADDTIME(tm,'01:00:00') FROM cal;
INSERT INTO cal (tm) SELECT ADDTIME(tm,'02:00:00') FROM cal;
INSERT INTO cal (tm) SELECT ADDTIME(tm,'04:00:00') FROM cal;
...
次に、それをクエリで使用できます:
SELECT v.id
, c.tm
FROM myview v
JOIN cal c
ON c.tm >= v.hour_from
AND c.tm <= v.hour_to
ORDER BY v.id, c.tm
特定の形式の時間値が必要な場合は、DATE_FORMAT
を使用できます。 機能:
SELECT v.id
, DATE_FORMAT(c.tm,'%H:%i') AS hour_
これは、ビューによって返される値がTIME
であることを前提としています。 データ・タイプ。そうでない場合は、変換する必要があります。 (または、標準形式の文字列を使用して同じ結果を得ることができます。)
注:テーブルがあることは必須ではありません。インラインビューなど、任意の行ソースにすることができます。必要なのは十分な行だけです(この場合、00:00から23:30までの30分刻みを想定すると、48行になります)。
真夜中の境界を「越える」時間範囲(22:00から02:00など)がある場合、サンプルクエリは行を返しません。調整する必要があります。
次のようなもの:
JOIN cal c
ON ( t.hour_from <= t.hour_to
AND c.tm >= v.hour_from
AND c.tm <= v.hour_to
)
OR ( t.hour_from > t.hour_to
AND ( c.tm <= v.hour_from
OR c.tm >= v.hour_to
)
)