在PL SQL中使用日期

时间:2016-12-14 23:55:21

标签: sql oracle plsql

我有一个简单的PL SQL代码。但是它在日期级别失败了。日期列是CODT。我宣布CODT为日期。在数据库级别,它是格式为YYYY-MM-DD的日期。

我也尝试过更改会话集nls_date_format ='YYYY-MM-DD';但这是错误。

错误消息为ORA-01830:日期格式图片在转换整个输入字符串之前结束

  1. 00000 - “日期格式图片在转换整个输入字符串之前结束”
  2. 你可以让我知道我需要把它更改为日期格式/我犯错的地方吗?

        DECLARE
    
        RID      VARCHAR2(100);
        KY       VARCHAR2(200);
        CODT     DATE;
    
        CURSOR FETCH_DTLS IS
    
        SELECT ROW_ID, 
               KEY, 
               CUT_OFF_DT,
        FROM TMP1
        WHERE RN = 1;
    
        BEGIN
    
        OPEN FETCH_DTLS;
    
        LOOP
    
        FETCH FETCH_DTLS 
        INTO RID,
             KY,
             CODT;
    
        EXIT WHEN FETCH_DTLS%NOTFOUND;
    
        INSERT INTO tmp2
        VALUES
        (RID,
         KY,
         CODT
        );
    
        END LOOP;
    
        COMMIT;
    
        CLOSE FETCH_DTLS;
    
        COMMIT;
    
        END;
    

2 个答案:

答案 0 :(得分:0)

如果你在db中有定义varchar2 的日期列,你应该像这样使用它:to_date(your_column/*CUT_OFF_DT*/, 'yyyy-mm-dd')

答案 1 :(得分:0)

当您使用 VARCHAR2 字段并将其插入带有 DATE 数据类型的表格中时,您告诉oracle:将 VARCHAR2 转换为的 DATE

所以你的错误是在没有提供任何格式的情况下进行投射,这里是oracle中使用的一些日期格式示例:

'YYYY-MM-DD'
'YYYY-MM-DD HH24:MI:SS'

oracle中还有另一个名为 TO_DATE 的函数可以完成这项工作,它只是将日期格式的字符串(char或varchar)转换为日期,并提供日历!以下是一些例子:

TO_DATE('2016-12-15','YYYY-MM-DD')--uses default calendar of session
TO_DATE('2016-12-15','YYYY-MM-DD', 'nls_calendar=gregorian')
TO_DATE('1395-09-25','YYYY-MM-DD', 'nls_calendar=persian')--Solar base date used in IRAN

和反向功能 TO_CHAR

TO_CHAR(SYSDATE,'YYYY-MM-DD')--SYSDATE is in Date type so this works

还有另一种与日期相关的数据类型,称为 TIMESTAMP

TO_CHAR(SYSTIMESTAMP,'YYYY-MM-DD HH24:MI:SSxFF')--SYSTIMESTAMP is in TIMESTAMP type so this works

最后我们可以使用 INTERVAL 类型来计算2个日期之间的间隔(特别是时间戳),并且有一个名为numtodsinterval的有用函数将数字转换为区间,你可以像这样使用它:

SYSDATE+NUMTODSINTERVAL(1,'Minute')

这是一个例子:

SELECT  TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS'), 
        TO_CHAR(SYSDATE+NUMTODSINTERVAL(1,'Minute'),'YYYY-MM-DD HH24:MI:SS')
  FROM  DUAL

输出:

1   2016-12-15 15:05:10 2016-12-15 15:06:10

我希望它对您未来 DATE ,goodluck

的用法有用