0

私の質問は、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標準のソリューションが高く評価されています!

4

2 に答える 2

4

MySQL には再帰機能がないため、NUMBERS テーブル トリックを使用する必要があります。

  1. 増加する数値のみを保持するテーブルを作成します - 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;
    
  2. 以下を使用してテーブルに入力します。

    INSERT INTO NUMBERS
      (id)
    VALUES
      (NULL)
    

    ...必要な数の値に対して。この場合、INSERT ステートメントを少なくとも 25 回実行する必要があります。

  3. 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 つのテーブルを使用することも意味します。

于 2011-05-08T22:51:37.990 に答える
0
SELECT * from dual WHERE field BETWEEN 0 AND 24 
于 2011-05-08T21:21:08.300 に答える