Informix

时间:2016-03-02 00:53:40

标签: sql database informix

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

dbuser@test:/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.

dbuser@test:/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

2 个答案:

答案 0 :(得分:2)

DATETIME值(例如2016-02-04 16:00:00)必须用引号('2016-02-04 16:00:00'"2016-02-04 16:00:00")括起来,或者更加华丽地打扮 - 简洁 - 作为DATETIME文字:{{1} }。总的来说,报价更简单。当数据在加载格式文件中并通过DB-Access的LOAD命令或其中一个加载器实用程序加载时,这不是必需的。

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

12:00 p通常不会写16:00 a;您可以使用4:00 p 01:00范围内的值和后缀(请记住12:59 12:00 a出现在12:59 a之前的所有时间,或者您使用24小时制01:00 a .. 00:00。总的来说,后者更为明智。如果要使用AM / PM后缀处理它们,则必须将值作为字符串包装在适当的23:59函数调用中,该函数调用将值转换为DATETIME HOUR TO MINUTE。但适当的功能是将TO_DATE拒绝为无效。

答案 1 :(得分:0)

首先,@ gordon-linoff说,你必须用引号括起字符串和日期时间/文字。

然后,您可能会收到下一个错误:

  

236:INSERT中的列数与VALUES的数量不匹配。

这是因为您在INSERT上添加了13个属性,并且传递了17 VALUESNULLS应该是问题。

然后,可能,你可以得到:

  

1263:日期时间或间隔值中的字段不正确或在日期时间字段中指定了非法操作。

如果您尝试使用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'
);