我的问题是如何选择一天中的所有 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 标准解决方案!
我的问题是如何选择一天中的所有 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
简单 - 可以根据数字生成日期,就像我提供的示例一样。这也意味着使用一个表,而不是每个数据类型一个表。
SELECT * from dual WHERE field BETWEEN 0 AND 24