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:日期时间操作的主要内容,如果未能解决你的问题,请参考以下文章