我想以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;
您的第一行将日期转换为字符串。你不能再添加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
之前已成功从varchar隐式转换为日期。在这种情况下,要么明确说明您的转化:
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参数设置为真正的日期类型