Datetime Informix:日期时间操作

Datetime Informix:日期时间操作,datetime,informix,Datetime,Informix,表test1中有2个字段: onlydate DATE onlytime DATETIME HOUR TO MINUTE 和表test2中的1个字段: dateandtime DATETIME YEAR TO SECOND 现在我需要附加onlydate和onlytime字段的值,并将其设置为dateandtime字段。如何实现这一点?您可以将两个值连接为文本,并将其转换为datetime,如下所示: update datetime_test set dateandtime = (da

表test1中有2个字段:

onlydate DATE
onlytime DATETIME HOUR TO MINUTE
和表test2中的1个字段:

dateandtime DATETIME YEAR TO SECOND

现在我需要附加onlydate和onlytime字段的值,并将其设置为dateandtime字段。如何实现这一点?

您可以将两个值连接为文本,并将其转换为datetime,如下所示:

update datetime_test
   set dateandtime = (dateonly || ' ' || timeonly || ':00')::
                      datetime year to second
基本问题是:

将日期转换为日期时间-使用扩展。 将日期时间转换为时间间隔-使用减法。 将这两个概念组合起来并仅应用于选择:

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
从时间中减去午夜只会将其转换为小时到分钟的间隔;您可以将DATETIME年添加到秒,将时间间隔小时添加到分钟,从而将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的设置,请使用MDY5,312010。

如果列都在一个表中,并且DBDATE='Y4MD-'时,您的解决方案运行良好。当必须在表之间传输值时,可能最终使用INSERT或MERGE语句。如果将DBDATE设置为其他格式,例如DBDATE=DMY4/或DBDATE=MDY4/则在Date上执行的格式设置仅用于将其转换为字符串,这意味着无法将其转换回DATETIME。演员阵容的格式要求很严格。