Как добавить часы к дате в 24-часовом формате - PullRequest
1 голос
/ 12 марта 2019

Я хотел бы добавить, например, 8 часов к конечной дате в 24-часовом формате.Я попытался добавить + 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 Ответ

8 голосов
/ 12 марта 2019

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

...