例如,我想以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;
答案 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参数设置为真正的日期类型