将日期时间值插入到 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) 数据库中。
目标列是
当这些工作时
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:mm
对DATETIME
无效。
【讨论】:
请看我上面的评论,我真的怀疑格式是'YYYY-MM-DD hh:mm:ss.fffff' 错误,没有。DATETIME
列总是是 YYYY-MM-DD hh:mm:ss.ffff
,这是时间戳的 ISO 标准(或其一部分 - 日期时间精度可以是 YEAR TO MONTH
、DAY 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 表中失败的主要内容,如果未能解决你的问题,请参考以下文章