0

我们应该创建一个函数,将 +7 天添加到 current 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 

但是,正如您所看到的,结果中不包含时间,这就是我在这种情况下所需要的。任何帮助将不胜感激。我确定我只是太盲目了,看不到它,但是我现在已经盯着这段代码太久了,我会承认我的失败。

4

3 回答 3

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;
于 2016-03-02T17:04:06.870 回答
1

您可以决定是否希望您的函数返回 adate或 a 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;
于 2016-03-02T17:19:50.830 回答
-1

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

dTmp 日期:=系统日期+n;

开始

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

结尾;

/

从双重选择 get_date(1);

于 2016-03-02T17:27:23.137 回答