SQL语句,从特定的小时范围中选择数据

时间:2012-05-09 16:23:41

标签: sql select

简介:我有一个包含表格的数据库,其中包含有小时的列,例如

08:30:00
08:45:00
09:30:00
12:20:00
...
18:00:00

此列中的数据类型为“time”。 问题:用SQL可以选择所有小时数[例如。 10:00:00,10:30:00,11:00:00等]从08:00:00到18:00:00,不在列表中?

编辑: 好吧,经过深思熟虑,你的解决方案[谢谢! ]并不是完全完美[它是完美的细节我给你:)]。我的应用程序允许用户在[此版本的应用程序]中进行约半小时的约会。我在第一个主题中给出了时间的专栏是非常乐观的,因为我没有在11:45:00或13:05:00之间举行会议,这将在12:15:00和13结束:35:00,所以我真的不知道从哪个小时我可以把这个额外的桌子放进去。

3 个答案:

答案 0 :(得分:1)

首先,创建一个包含T_REF列的表COL_HR,其中包含日期 如果在原始表格中找不到您要报告的所有小时数。

在MYSQL中,做这样的事情应该有效

SELECT DATE_FORMAT(COLUMN_NAME, '%H') FROM T_REF
MINUS
SELECT DATE_FORMAT(COLUMN_NAME, '%H') FROM ORIG_TABLE

这将只获取并比较小时数并报告不小时数 在你的表格中(ORIG_TABLE)。

答案 1 :(得分:1)

丑陋但可能:

CREATE TABLE thours (h time);
INSERT INTO thours VALUES
    ('08:30:00'), ('08:45:00'), ('09:30:00'),
    ('12:20:00'), ('18:00:00');

CREATE VIEW hrange AS
SELECT 8 as h UNION ALL SELECT  9 UNION ALL SELECT 10 UNION ALL
SELECT 11     UNION ALL SELECT 12 UNION ALL SELECT 13 UNION ALL
SELECT 14     UNION ALL SELECT 15 UNION ALL SELECT 16 UNION ALL
SELECT 17     UNION ALL SELECT 18;

CREATE VIEW hours AS
SELECT cast(concat(cast(h as char), ':00:00') as time) AS h FROM hrange
UNION ALL
SELECT cast(concat(cast(h as char), ':30:00') as time)
  FROM hrange WHERE h < 18
 ORDER BY 1;

SELECT h.h AS ranged, t.h AS scheduled
  FROM hours h
  LEFT join thours t ON h.h = t.h;

如果您要在查询中添加WHERE t.h IS NULL,则会获得所需时间列表。

我创建了视图,因为MySQL无法动态生成系列。 Try out here

答案 2 :(得分:0)

您是否只希望每小时半小时找到一次?如果不知道您希望找到或找不到哪些时间,我建议如下:

创建一个包含所有可能时间的单独表格,然后运行查询以查找原始表格中不存在的时间。