2016-03-02 81 views
1

这是发出的代码和错误消息:Informix中的错误消息

[email protected]:/var/lib/dbspace/bosarc/Active_Sites/Port_Hope> dbaccess labor32<<? 
> INSERT INTO SCH_DAILY (ssn,time_start,week_day,time_end,dept_key,pos_id,sched_time,break_minutes,comments,start_time,end_time,report_date,week_start_date) values (000287752,2016-02-04 16:00:00,5,2016-02-04 12:00:00,D000000007,CASHIE,8.0,0,0,16:00 a,12:00 p,2016-02-04 00:00:00,2016-01-29 00:00:00,NULL,NULL,NULL,NULL); 
> ? 

Database selected. 


    201: A syntax error has occurred. 
Error in line 1 
Near character position 178 


Database closed. 

[email protected]:/var/lib/dbspace/bosarc/Active_Sites/Port_Hope> 

我甚至试图直接从数据库中下载文件,并将其与我试图加载的信息相匹配。

数据库文件

555005875|2016-01-21 16:00:00|5|2016-01-21 22:00:00|D000000007|CASHIE|6.0|0||04:00 p |10:00 p|2016-01-21 00:00:00|2016-01-15 00:00:00|||| 

我试图插入:

000287752,2016-02-04 16:00:00,5,2016-02-04 12:00:00,D000000007,CASHIE,8.0,0,0,16:00 a,12:00 p,2016-02-04 00:00:00,2016-01-29 00:00:00,NULL,NULL,NULL,NULL 
+1

您需要围绕字符串和日期/时间字面值使用单引号。 –

回答

0

首先,有@戈登 - linoff说,你来包围字符串和日期时间/文字用引号。

然后,也许你会得到一个错误:

236: Number of columns in INSERT does not match number of VALUES.

这是因为你把对INSERT 13个属性,并通过17 VALUES,该NULLS应该是问题。

然后,或许,你可以得到:

1263: A field in a datetime or interval values is incorrect or an illegal operation specified on datetime field.

如果您收到此尝试传递的日期/时间值与TO_DATE功能:

TO_DATE('216-02-02 12:16:24','%Y-%m-%d %H:%M:%S') 
TO_DATE('23:24','%H:%M') -- 24H format 
TO_DATE('11:24 PM','%I:%M %p') -- 12H format AM/PM 

虽然我相信start_timeend_ time不是日期类型。

在你的情况下尝试下INSERT

INSERT INTO SCH_DAILY( 
    ssn, 
    time_start, 
    week_day, 
    time_end, 
    dept_key, 
    pos_id, 
    sched_time, 
    break_minutes, 
    comme‌​nts, 
    start_time, 
    end_time, 
    report_date, 
    week_start_date 
) VALUES (
    '000287752', 
    '2016-02-04 16:00:00', 
    5, 
    '2016-02-04 12:00:00', 
    'D000000007', 
    'CASHIE', 
    8.0, 
    0, 
    0, 
    '16:00 a', 
    '12:00 p', 
    '2016-02-04 00:00:00', 
    '2016-01-29 00:00:00' 
); 
+0

开始和结束时间的值是有效的数据类型。在标准SQL中,它们是TIMESTAMP;在Informix中,他们的日期是第二年。 –

+0

@ jonathan-leffler我说的是那些显示'04:00 p'的人。 –

+0

你的权利,它绕过我得到的错误,现在我得到的错误,它看起来像在日期的下一个序列,即使我有报价。 – user5161585

2

的日期时间值,如2016-02-04 16:00:00必须用引号(无论是'2016-02-04 16:00:00'"2016-02-04 16:00:00"),或打扮更华丽 - 冗长 - 作为一个DATETIME文字: DATETIME(2016-02-04 16:00:00) YEAR TO SECOND。总的来说,报价更简单。当数据处于加载格式文件并通过DB-Access的LOAD命令或其中一个加载器实用程序加载时,这不是必需的。

AM/PM时间值(如16:00 a12:00 p)仍然存在问题 - 除非将它们插入到字符列中。 Informix支持DATETIME HOUR TO MINUTE,它将接受00:00 .. 23:59值作为一天内的有效时间。

16:00 a通常不会如何编写4:00 p;你无论是在范围01:00使用值.. 12:59后缀(记住,所有的次12:00 a的.. 12:59 a01:00 a之前发生),或使用24小时时钟00:00 .. 23:59。总体而言,后者更明智。如果要使用AM/PM后缀处理它们,则必须将该值作为字符串包装在适当的TO_DATE函数调用中,该函数将该值转换为DATETIME HOUR TO MINUTE。但是相应的功能将会拒绝16:00 a无效。

+0

插入值列表中还有一个单词“CASHIE”(它是可怕的让代码像这样向右滚动),这也必须用引号括起来。一般来说,缺少很多引号。 –