sql - 自动填充 "time_hour"表

标签 sql oracle

我需要将一天 24 小时存储在表“time_hours”中。这是我的表的结构:

Create table time_hours
    (HOURS number,
    HOUR_RANGE VARCHAR (20),
    HOUR_MIN VARCHAR (20),
    HOUR_MAX VARCHAR(20));

这是我到目前为止的脚本:

Insert into time_hours(HOURS,
   HOUR_RANGE,
   HOUR_MIN,
   HOUR_MAX)
Select 
to_number(to_char(t,'HH24'),'00'),
to_char(t,'HH24:MI:SS'),
to_char(t,'HH24:MI:SS'),
to_char(t,'HH24:MI:SS')
FROM
    (
    Select trunc(sysdate) + (level-1)/24 as t
    FROM dual
    Connect by level <=24
    );

结果是:

Hours | HOUR_RANGE | HOUR_MIN | HOUR_MAX
0       00:00:00    00:00:00   00:00:00  
1       01:00:00     01:00:00   01:00:00     
..    
23      23:00:00     23:00:00   23:00:00  

但是我需要这个输出:

Hours | HOUR_RANGE | HOUR_MIN | HOUR_MAX
0       00h-00h59    00:00:00   00:59:59
1       01h00-01h59  01:00:00   01:59:59
2       02h00-02h59  02:00:00   02:59:59
..      ..           ..         .. 
23      23h00-23h59  23:00:00   23.59.59

我的问题: 如何设置“HOUR_RANGE”和“HOUR_MAX”列的格式以获得预期的输出?

提前感谢大家的帮助

最佳答案

您可以使用:

Select 
  to_number(to_char(t,'HH24'),'00') AS Hours,
  to_char(t,'HH24"h"MI"-"HH24"h59"') AS HOUR_RANGE,
  to_char(t,'HH24:MI:SS') AS HOUR_MIN,
  to_char(t+1/24-1/(24*3600),'HH24:MI:SS') AS HOUR_MAX
FROM (Select trunc(sysdate) + (level-1)/24 as t
    FROM dual
    Connect by level <=24 );

<强> Rextester Demo

关于sql - 自动填充 "time_hour"表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46753734/

相关文章:

php - 如何从包含一组重复值(clm1、clm2、cl3)的表中选择 id?

sql - 在 oracle SELECT 的 WHERE 子句中将列与自身进行比较

sql - 从 Dual 选择 regexp_replace ('aaa_bbb' 、 '(_.)' 、上部 ('\1' ))

sql - 无法合并联合所有 View

java - 如何在 Java 中执行 Oracle PLSQL block

c# - 子类上的 NHibernate (3.1) 子查询未加入基类表

sql - 每个左连接返回 1 个结果

javascript - 在一个查询中检索一行的两个值

php - Inner Join WITH 和 inner join ON 有什么区别?

php - 当使用 WHERE NOT IN 时,它返回 WHERE IN 之一