私の質問は、1 日の 24 時間すべてをデータとして選択するにはどうすればよいselectですか?
それを行うためのより洗練された方法があります:
select 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23
from dual
私のターゲットデータベースはMysqlですが、SQL標準のソリューションが高く評価されています!
私の質問は、1 日の 24 時間すべてをデータとして選択するにはどうすればよいselectですか?
それを行うためのより洗練された方法があります:
select 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23
from dual
私のターゲットデータベースはMysqlですが、SQL標準のソリューションが高く評価されています!
MySQL には再帰機能がないため、NUMBERS テーブル トリックを使用する必要があります。
増加する数値のみを保持するテーブルを作成します - auto_increment を使用して簡単に実行できます:
DROP TABLE IF EXISTS `example`.`numbers`;
CREATE TABLE `example`.`numbers` (
`id` int(10) unsigned NOT NULL auto_increment,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
以下を使用してテーブルに入力します。
INSERT INTO NUMBERS
(id)
VALUES
(NULL)
...必要な数の値に対して。この場合、INSERT ステートメントを少なくとも 25 回実行する必要があります。
DATE_ADDを使用して、NUMBERS.id値に基づいて増加する時間のリストを作成します。
SELECT x.dt
FROM (SELECT TIME(DATE_ADD('2010-01-01', INTERVAL (n.id - 1) HOUR)) AS dt
FROM numbers n
WHERE DATE_ADD('2010-01-01', INTERVAL (n.id - 1) HOUR) <= '2010-01-02' ) x
シンプル - 私が提供した例のように、数値に基づいて日付を生成できます。また、データ型ごとに 1 つのテーブルを使用するのではなく、1 つのテーブルを使用することも意味します。
SELECT * from dual WHERE field BETWEEN 0 AND 24