如何在Oracle 10g xe中插入日期?

如何在Oracle 10g xe中插入日期?,oracle,oracle-xe,Oracle,Oracle Xe,我做了以下工作: 二, 三, 它给出了一个错误: ORA-01843:不是有效月份 但是,如果执行下面的操作,则没有问题: 查询: INSERT INTO BOOK VALUES('4','123459','INTRODUCTION TO Small Talk','IT',157.00,'S','**26-JAN-1991**',13,103); 有人能解释一下原因吗?这对我很有效。这意味着您的alter语句由于某种原因不起作用。但是,在使用文字时,在系统上采用特定的日期格式并不是一种好的

我做了以下工作:

  • 二,

    三,

    它给出了一个错误ORA-01843:不是有效月份

    但是,如果执行下面的操作,则没有问题:

    查询:

    INSERT INTO 
    BOOK
    VALUES('4','123459','INTRODUCTION TO Small Talk','IT',157.00,'S','**26-JAN-1991**',13,103);
    

    有人能解释一下原因吗?

    这对我很有效。这意味着您的alter语句由于某种原因不起作用。但是,在使用文字时,在系统上采用特定的日期格式并不是一种好的做法。相反,在插入时使用格式掩码强制转换文本,例如:

    INSERT INTO BOOK
    VALUES('4','123459','INTRODUCTION TO Small Talk','IT',157.00,'S',
           to_date('26-JAN-1991','DD-MON-YYYY'), 13,103);
    

    (或者您需要的任何文本输入值格式)

    它对我很有用。这意味着您的alter语句由于某种原因不起作用。但是,在使用文字时,在系统上采用特定的日期格式并不是一种好的做法。相反,在插入时使用格式掩码强制转换文本,例如:

    INSERT INTO BOOK
    VALUES('4','123459','INTRODUCTION TO Small Talk','IT',157.00,'S',
           to_date('26-JAN-1991','DD-MON-YYYY'), 13,103);
    

    (或您需要作为文字输入值的任何格式)

    这是因为在您的数据库中,nls_date_time设置为'DD-MON-rrrrr'格式,您可以使用
    从V$NLS\u参数中选择*

    在这个查询中

    插入账面价值('4','123459','SmallTalk简介','IT',157.00,'S','26-01-1991',13103)

    日期格式为“dd-mm-rrrrrr”,将语句更改为

    插入账面价值('4','123459','SmallTalk简介','IT',157.00,'S',截至日期('26-01-1991','dd-mm rrrr'),13103)


    由于您现在提供了日期格式,因此它也将运行。

    这是因为在您的数据库中,nls_date_time设置为'DD-MON-rrrrr'格式,您可以使用
    从V$NLS\u参数中选择*

    在这个查询中

    插入账面价值('4','123459','SmallTalk简介','IT',157.00,'S','26-01-1991',13103)

    日期格式为“dd-mm-rrrrrr”,将语句更改为

    插入账面价值('4','123459','SmallTalk简介','IT',157.00,'S',截至日期('26-01-1991','dd-mm rrrr'),13103)

    由于您现在提供了日期格式,因此它也将运行。

    您想阅读手册的部分。备选方案包括:

    • 使用日期文字:
      date'1991-01-26'
    • 从字符串转换为日期('26-01-1991','DD-MM-YYYY')
    如果设置了
    NLS\u DATE\u FORMAT
    ,则可以省略
    TO\u DATE()
    的第二个参数,但不能完全跳过该函数

    另请参见:

    您想阅读本手册的章节。备选方案包括:

    • 使用日期文字:
      date'1991-01-26'
    • 从字符串转换为日期('26-01-1991','DD-MM-YYYY')
    如果设置了
    NLS\u DATE\u FORMAT
    ,则可以省略
    TO\u DATE()
    的第二个参数,但不能完全跳过该函数

    另请参见:

    当您设置

    ALTER SESSION SET nls_date_format = 'DD-MM-YYYY HH24:MI:SS';
    
    那么您的插入必须与此格式匹配,即

    INSERT INTO BOOK VALUES('4','123459','INTRODUCTION TO SmallTalk','IT',157.00,'S',
    '26-01-1991 00:00:00'
    ,13,103);
    
    但是,更安全的方法是使用日期文字或to_date函数。

    当您设置

    ALTER SESSION SET nls_date_format = 'DD-MM-YYYY HH24:MI:SS';
    
    那么您的插入必须与此格式匹配,即

    INSERT INTO BOOK VALUES('4','123459','INTRODUCTION TO SmallTalk','IT',157.00,'S',
    '26-01-1991 00:00:00'
    ,13,103);
    
    但是,更安全的方法是使用日期文字或to_date函数。

    您只需要使用

    INSERT INTO TABLE_NAME VALUES('07-JAN-96');
    
    Oracle始终采用
    “DD-MMM-YY”
    格式。您应该将月份写为月份名称的前3个字符。

    您只需使用

    INSERT INTO TABLE_NAME VALUES('07-JAN-96');
    

    Oracle始终采用
    “DD-MMM-YY”
    格式。您应该将月份写为月份名称的前3个字符。

    Oracle的默认NLS日期格式为'DD-MON-YYYY',但正如@OldProgrammer建议的那样,最好谨慎使用您选择的日期掩码来转换日期字符串。如果与具有不同默认日期格式的其他系统迁移代码或共享源代码,则信任隐式数据值转换(如字符串到日期的操作)可能会导致问题。Oracle的默认NLS日期格式为“DD-MON-YYYY”,但正如@OldProgrammer所建议的,最好谨慎一点,使用你选择的日期掩码来设置日期字符串。如果与具有不同日期格式默认值的其他系统迁移代码或共享源代码,则信任隐式数据值转换(如字符串到日期的操作)可能会导致问题。@Tunaki您能解释一下这个答案是否正确吗valid@Tunaki你能解释一下这个答案是否正确吗