【问题标题】:PL/SQL function to add +7 days to SYSDATEPL/SQL 函数将 +7 天添加到 SYSDATE
【发布时间】:2016-03-02 17:00:29
【问题描述】:

我们应该创建一个函数,在当前的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 

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

【问题讨论】:

    标签: sql oracle function sysdate


    【解决方案1】:

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

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

    【讨论】:

    • 但是当我添加该行时,我收到了 06575. 00000 - “包或函数 %s 处于无效状态”。我可能做错了什么。我在 BEGIN 下方添加 SELECT 语句,并返回“get_date”。还是我必须先声明?
    • @tobulos1 我添加了更多细节
    • 哦,我明白了。并且没有办法从函数中格式化 SYSDATE?这样我就可以只写SELECT get_date(7) FROM dual; 来得到我的结果?
    • 谢谢!做到了。所以我想我不能用DATE 返回时间,而必须改用VARCHAR2?另外,我在添加n 之前完成了SYSDATE 格式。非常感谢,我现在明白了:)
    • @tobulos1 日期字段有一个时间组件,只是您的输出的默认格式没有显示给您。将其转换为字符可让您控制输出,但不会更改实际的基础值。
    【解决方案2】:

    您可以决定是否希望您的函数返回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;
    

    【讨论】:

      【解决方案3】:

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

      dTmp DATE:=sysdate+n;

      开始

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

      结束;

      /

      SELECT get_date(1) FROM dual;

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-02-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-08
        相关资源
        最近更新 更多