Ваша первая строка преобразует дату в строку. Вы не можете затем добавить 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 действительно тип даты