在SQL查询中获取所有24小时

时间:2011-05-08 21:11:13

标签: mysql sql datetime-generation

我的问题是如何在一天中选择所有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 个答案:

答案 0 :(得分: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
    
  4. 为什么是数字,而不是日期?

    简单 - 可以根据数字生成日期,就像我提供的示例一样。它还意味着使用单个表,而不是每个数据类型一个。

答案 1 :(得分:0)

SELECT * from dual WHERE field BETWEEN 0 AND 24