首页 > 解决方案 > 如何以 24 小时格式添加迄今为止的小时数

问题描述

例如,我想以 24 小时格式在结束日期中添加 8 小时。我尝试在第一行添加 + 8/24, 'DD-MM-YYYY HH24:MI:SS' 但这会产生错误。

到目前为止,这是我的查询。

SELECT to_char(IN_ENDDATE, 'DD-MM-YYYY HH24:MI:SS')
  INTO IN_END_DATE_STRING
  FROM DUAL;

标签: sqldatabaseoracleplsqldate-arithmetic

解决方案


您的第一行将日期转换为字符串。然后,您不能向其添加 8/24。在转换之前进行添加:

SELECT to_char(IN_ENDDATE + 8/24.0, 'DD-MM-YYYY HH24:MI:SS')
INTO IN_END_DATE_STRING
FROM DUAL;

IN_ENDDATE 确实需要是允许+8/24工作的日期类型。如果是时间戳,请将其添加为间隔:

IN_ENDDATE + INTERVAL '8' HOUR

出于以下几个原因,使用此表单可能更安全:

  • 它适用于日期和时间戳
  • 它更具可读性

如果 IN_ENDDATE 是非日期类型(例如 varchar),那么您的查询在没有 的情况下工作,+8/24因为它在传递给to_char. 在这种情况下,要么明确说明您的转换:

SELECT to_char(to_date(IN_ENDDATE, 'YYMMDD WHATEVER') + 8/24.0, 'DD-MM-YYYY HH24:MI:SS')
INTO IN_END_DATE_STRING
FROM DUAL

SELECT to_char(to_date(IN_ENDDATE, 'YYMMDD WHATEVER') + INTERVAL '8' HOUR, 'DD-MM-YYYY HH24:MI:SS')
INTO IN_END_DATE_STRING
FROM DUAL

或者将您的 IN_ENDDATE 参数设置为真正的日期类型


推荐阅读