将日期时间值插入到 informix 表中失败

Posted

技术标签:

【中文标题】将日期时间值插入到 informix 表中失败【英文标题】:Inserting datetime values into an informix table fails 【发布时间】:2012-07-20 14:03:39 【问题描述】:

我正在尝试将测试值 '10.06.2011 10:24' 插入到 informix 7.3(sadly) 数据库中。 目标列是

System.DateTime 长度:16 精度 10

当这些工作时

select  to_date('10.06.2011 10:24', "%d.%m.%Y %H:%M") from test;
INSERT into test values('10.06.2011')

这些不是

insert into test values('10.06.2011 10:24');
insert into test values(to_date('10.06.2011 10:24:00', "%d.%m.%Y %H:%M"))

我尝试了其他几种方法,例如添加秒数,但如果有效,则没有。我得到的所有错误都是语法错误,没有任何详细信息。

欢迎提出任何建议。

【问题讨论】:

【参考方案1】:

您可以使用DBDATE 环境变量来控制DATE 类型字段的显示和解释方式。将其设置为“DMY4”。将按照您显示的日期格式化日期。

但正如弗兰克所说,DATETIME 的格式是固定的:它必须是 'YYYY-MM-DD hh:mm:ss.fffff' 或其一部分,具体取决于相关DATETIME 列的规模和精度。

更新(第二条评论有点长...)

您对“目标列”格式的声明让我感到困扰。如果您运行以下命令:

dbschema -d <database> -t <table>

...结果将告诉您 Informix 理解的列定义。是DATE 还是DATETIME

您可以将DATETIME 值插入DATE 列(时间被截断),您可以将DATE 插入DATETIME 列(时间默认为午夜)。但该值必须能够强制转换为目标列格式,并且DD.MM.YYYY hh:mmDATETIME 无效。

【讨论】:

请看我上面的评论,我真的怀疑格式是'YYYY-MM-DD hh:mm:ss.fffff' 错误,没有。 DATETIME总是YYYY-MM-DD hh:mm:ss.ffff,这是时间戳的 ISO 标准(或其一部分 - 日期时间精度可以是 YEAR TO MONTHDAY TO MINUTE 等),比版本更早7.DATE列的解释和呈现受$DBDATE环境变量设置的影响。 执行 dbschema 显示该列确实是日期类型而不是日期时间。我之前用来显示列类型的工具返回“System.DateTime”,这是错误的。我们遇到了问题。非常感谢!【参考方案2】:

您尝试插入DATETIME 列的日期部分10.06.2011 的格式错误。

使用您的示例,接受的格式是:2011-10-06 10:24:00

【讨论】:

正如我上面写的,我可以使用格式 MM:DD:YYYY 插入数据。如果我使用您建议的格式,我会收到错误“日期中的年份无效”。我认为较新版本的数据库使用该格式,但不是这个。问题真的是如何插入正确的时间,日期似乎很好。 您应该编辑您的问题以澄清:1) 是 Informix 7.2、7.x 吗? 2) 您尝试插入的DATETIME 列的描述,例如:是DATETIME YEAR TO MINUTE 吗? (见DATETIME datatypes, Section 3-29

以上是关于将日期时间值插入到 informix 表中失败的主要内容,如果未能解决你的问题,请参考以下文章

在informix中相当于日期时间年份的Mysql到分数(3)

如何将日期值插入表中

将列值转换为日期时间以插入 AccessDB

将预定的日期时间值插入 SQL 表

将日期值插入 MS 访问

SQL Server:结合日期列和时间列,插入到日期时间列