【问题标题】:Displaying each of the 24hrs of the day显示一天中的每个 24 小时
【发布时间】:2010-12-14 02:36:34
【问题描述】:

我试图以 24 小时格式显示小时数,例如:

选择 to_char(trunc(sysdate+(1/24)),'HH24:mi') 来自双重

但这只总是返回 00:00。如何显示 01:00 到 23:00?

感谢和问候

【问题讨论】:

  • 请标记或至少在您的问题中提及您正在使用的软件(我猜在这种情况下是 Oracle?)。
  • @Nicholas:你可以自己编辑标签...
  • @OMG - 是的,他可以;他不应该这样做,期望提出问题的人适当地标记它并不是不合理的。但是,第一次提问的人应该放松一下。
  • (我不只是编辑标签的原因是我不确定,我没有回答的原因是我不再使用 Oracle :-)

标签: sql oracle


【解决方案1】:

这适用于 Oracle 9i+:

SELECT TO_CHAR(TRUNC(SYSDATE) + (LEVEL / 24)), 'HH24:mi') 
  FROM DUAL
CONNECT BY LEVEL <= 24

【讨论】:

  • +1 ... 对于涉及最后一天的几个小时的结果集的复杂查询需要这样的东西 - 现在我们将看看优化器是否不理会它:-)
【解决方案2】:

如果您想显示小时数,您需要您的日期实际包含小时数。 这意味着 - 正确使用 TRUNC() 的括号。

这很好。

SELECT TO_CHAR(TRUNC(SYSDATE) + (LEVEL / 24), 'HH24:mi') 
  FROM DUAL
CONNECT BY LEVEL <= 24

这不好。

SELECT TO_CHAR(TRUNC(SYSDATE + (LEVEL / 24)), 'HH24:mi') 
  FROM DUAL
CONNECT BY LEVEL <= 24

【讨论】:

    最近更新 更多