【问题标题】:Informix: datetime manipulationInformix:日期时间操作
【发布时间】: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 字段。我该怎么做?

【问题讨论】:

    标签: datetime informix


    【解决方案1】:

    基本问题是:

    1. 将 DATE 转换为 DATETIME -- 使用 EXTEND。
    2. 将 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。演员表的格式要求很严格。
      猜你喜欢
      • 1970-01-01
      • 2012-05-14
      • 2013-09-29
      • 2013-03-30
      • 1970-01-01
      • 1970-01-01
      • 2022-11-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多