Получить все 24 часа в запросе SQL

Мой вопрос, как я могу выбрать все 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-стандарт приветствуется!

2 ответа

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
    

Почему цифры, а не даты?

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

SELECT * from dual WHERE field BETWEEN 0 AND 24 
Другие вопросы по тегам