Функция PL/SQL для добавления +7 дней к SYSDATE

Мы должны сделать функцию, которая добавляет +7 дней к текущему SYSDATE, а также введите время и минуту, однако мой код отображает только дату, а не время. Что я делаю неправильно? Это, наверное, очень легко, но я просто не могу понять, и в интернете тоже не так много помощи.

Пока что я пробовал:

CREATE OR REPLACE FUNCTION get_date(n IN NUMBER) 
RETURN DATE AS
BEGIN
  RETURN to_date(to_char(SYSDATE, 'DD.MM.YYYY HH24:MI'),'DD.MM.YYYY HH24:MI') + n;
END get_date;
/

Поэтому, когда вы пишете (7 - это количество дней для продвижения вперед):

SELECT get_date(7)
FROM dual;

Его результат таков:

GET_DATE(7)
----------------
09.03.2016 

Однако, как вы видите, время не включено в результат, и это то, что мне нужно в этом случае. Любая помощь будет оценена. Я уверен, что просто слишком слеп, чтобы видеть это, но я слишком долго смотрел на этот кусок кода, я признаю свое поражение.

3 ответа

Решение

Вы должны отформатировать результат в соответствии с вашими требованиями, как в

--create the function  
CREATE OR REPLACE FUNCTION get_date(n IN NUMBER) 
RETURN DATE AS
BEGIN
  RETURN SYSDATE + n;
END get_date;

--call the function
SELECT TO_CHAR(get_date(7), 'DD.MM.YYYY HH24:MI')
FROM dual;

Или ваше новое требование не форматировать вне функции

--create the function  
CREATE OR REPLACE FUNCTION get_date(n IN NUMBER) 
RETURN VARCHAR2 AS
BEGIN
  RETURN TO_CHAR(SYSDATE + n,'DD.MM.YYYY HH24:MI');
END get_date;

--call the function
SELECT get_date(7)
FROM dual;

Вы можете решить, хотите ли вы, чтобы ваша функция возвращала date или varchar; Вы можете выбрать один из следующих способов, в зависимости от ваших потребностей:

CREATE OR REPLACE FUNCTION get_date(n IN NUMBER) 
RETURN varchar2 AS
BEGIN
  RETURN to_char(SYSDATE  + n, 'DD.MM.YYYY HH24:MI');
END get_date;
/

CREATE OR REPLACE FUNCTION get_date2(n IN NUMBER) 
RETURN date AS
BEGIN
  RETURN to_date(to_char(SYSDATE  + n, 'DD.MM.YYYY HH24:MI'), 'DD.MM.YYYY HH24:MI');
END get_date2;
/

select to_char(get_date2(1), 'DD.MM.YYYY HH24:MI') from dual;

select get_date(1) from dual;

СОЗДАТЬ ИЛИ ЗАМЕНИТЬ ФУНКЦИЮ get_date (n IN NUMBER) RETURN varchar2 is

dTmp DATE: = sysdate + n;

НАЧАТЬ

RETURN to_char(dTmp, 'ДД.ММ.ГГГГ ЧЧ24: МИ');

КОНЕЦ;

/

SELECT get_date (1) FROM dual;

Другие вопросы по тегам