Informix:日期时间操作

Posted

技术标签:

【中文标题】Informix:日期时间操作【英文标题】:Informix: datetime manipulation 【发布时间】:2010-05-27 17:07:23 【问题描述】:

我在表 test1 中有 2 个字段:

onlydate DATE
onlytime DATETIME HOUR TO MINUTE

和表test2中的1个字段:

dateandtime DATETIME YEAR TO SECOND

现在我需要附加 onlydate 和 onlytime 字段的值并将其设置为 dateandtime 字段。我该怎么做?

【问题讨论】:

【参考方案1】:

基本问题是:

    将 DATE 转换为 DATETIME -- 使用 EXTEND。 将 DATETIME 转换为 INTERVAL -- 使用减法。

集合这两个概念并仅应用于 SELECT:

create temp table td(dateonly date not null, timeonly datetime hour to minute);
insert into td values('2010-05-31', '06:30');
select extend(dateonly, year to second) + 
       (timeonly - datetime(00:00) hour to minute) from td;

结果就是你想要的:

DATETIME YEAR TO SECOND
2010-05-31 06:30:00

timeonly 中减去午夜将其转换为 INTERVAL HOUR TO MINUTE;您可以添加一个 DATETIME YEAR TO SECOND 和一个 INTERVAL HOUR TO MINUTE,得到一个 DATETIME YEAR TO SECOND。您不能添加两个 DATETIME 值。

所以,严格回答你的问题,你会写:

INSERT INTO Test2(DateAndTime)
     SELECT EXTEND(DateOnly, YEAR TO SECOND) + 
                  (TimeOnly - DATETIME(00:00) HOUR TO MINUTE) AS DateAndTime
       FROM Test1;

(我使用 DBDATE=Y4MD- 运行,以便显示的日期文字按预期工作。无论 DBDATE 的设置如何,要可靠地插入 DATE 常量,请使用 MDY(5,31,2010)。)

【讨论】:

【参考方案2】:

您可以将两个值连接为文本,并将其转换为日期时间,例如:

update datetime_test
   set dateandtime = (dateonly || ' ' || timeonly || ':00')::
                      datetime year to second

【讨论】:

当列都在一个表中时,您的解决方案可以很好地工作,并且DBDATE='Y4MD-'。当必须在表之间传输值时,您可能最终会使用 INSERT 或 MERGE 语句。当 DBDATE 设置为其他格式(例如 DBDATE=DMY4/DBDATE=MDY4/)时,在 dateonly 上完成的格式化以将其转换为字符串意味着它无法转换回 DATETIME。演员表的格式要求很严格。

以上是关于Informix:日期时间操作的主要内容,如果未能解决你的问题,请参考以下文章

Informix:.NET 驱动程序:默认日期时间格式

Informix 日期时间选择标准(在运算符之间)

带有准备好的语句的 Informix 日期时间

如何在 Informix 中转换插入日期时间的格式?

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

两个日期时间之间的差异(以毫秒为单位)(Informix)