Получить все 24 часа в запросе SQL - PullRequest
0 голосов
/ 09 мая 2011

мой вопрос: как я могу выбрать все 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

Мойtarget db - Mysql, но приветствуется стандартное решение sql!

Ответы [ 2 ]

4 голосов
/ 09 мая 2011

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
    

Почему числа, а не даты?

Простые - даты могут быть сгенерированы на основе числа, как в приведенном мной примере.Это также означает использование одной таблицы, скажем, по одной для каждого типа данных.

0 голосов
/ 09 мая 2011
SELECT * from dual WHERE field BETWEEN 0 AND 24 
...