如何以24小时格式添加小时数

时间:2019-03-12 10:27:58

标签: sql database oracle plsql date-arithmetic

例如,我想以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;

1 个答案:

答案 0 :(得分:8)

第一行将日期转换为字符串。然后,您不能在其中添加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,因为它已成功地从varchar隐式转换为日期,然后传递给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参数设置为真正的日期类型