Функция 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;