如何在oracle中分配值时插入默认日期类型

时间:2017-03-23 11:30:09

标签: sql oracle

insert all
into employee_leave (emp_id ,leave_id,leave_date_from,leave_date_to,loss_of_pay_days)
values('EA12345',1, to_date('07-JUL-2012', 'DD-Mon-YY'), to_date('09-JUL-2012','DD-Mon-YY'),0)
select * from dual;

我想在To_Date('07 -JUL-2012','DD-Mon-YY')格式中插入日期,同时 我试图插入但显示错误。如何纠正这个?

3 个答案:

答案 0 :(得分:1)

您不需要INSERT ALL或DUAL来插入单行;你可以简单地使用:

INSERT INTO employee_leave(
                           emp_id,
                           leave_id,
                           leave_date_from,
                           leave_date_to,
                           loss_of_pay_days
                          )
VALUES (
        'EA12345',
        1,
        TO_DATE('07-JUL-2012', 'DD-Mon-YYYY'),
        TO_DATE('09-JUL-2012', 'DD-Mon-YYYY'),
        0
       );

我编辑了格式蒙版以适应日期字符串;另请注意,这依赖于NLS语言,而对于日期使用ANSI标准会更安全:

INSERT INTO employee_leave(
                           emp_id,
                           leave_id,
                           leave_date_from,
                           leave_date_to,
                           loss_of_pay_days
                          )
VALUES (
        'EA12345',
        1,
        date '2012-07-07',
        date '2012-07-09',
        0
       );

答案 1 :(得分:0)

也许你的nls格式化不是英语。

我的意思是尝试这个来理解月份名称:

  select to_char(to_date('20160701','yyyymmdd') ,'Mon') from dual

如果结果是'Jul'就可以了,但是如果是'Tem'(土耳其语)你就不能插入那个日期,因为它会出现这个错误:

ORA-01843:无效月份

答案 2 :(得分:0)

在您的日期中,您提供了一个4位数的年份,但您的日期模式指定了2位数的年份。将insert语句更改为

insert all
  into employee_leave
    (emp_id,        leave_id,              leave_date_from,
     leave_date_to,                        loss_of_pay_days)
  values
    ('EA12345',     1,                     to_date('07-JUL-2012', 'DD-MON-YYYY'), 
     to_date('09-JUL-2012','DD-MON-YYYY'), 0)
  select * from dual

祝你好运。