PL / SQL函数向SYSDATE添加+7天

时间:2016-03-02 17:00:29

标签: sql oracle function sysdate

我们应该创建一个向当前SYSDATE添加+7天的函数,并编写时间和分钟,但是,我的代码只显示日期,而不是时间。我究竟做错了什么?这可能很容易,但我无法弄明白,互联网也没什么帮助。

到目前为止,我已经尝试过了:

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 个答案:

答案 0 :(得分:2)

您必须将结果格式化为您的规格,如

--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;

答案 1 :(得分:1)

您可以决定是否希望自己的功能返回datevarchar;您可以根据需要选择以下方式之一:

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;

答案 2 :(得分:-1)

创建或替换函数get_date(n IN NUMBER) RETURN varchar2是

dTmp DATE:= sysdate + n;

BEGIN

RETURN to_char(dTmp,'DD.MM.YYYY HH24:MI');

END;

/

SELECT get_date(1)FROM dual;