代码之家  ›  专栏  ›  技术社区  ›  Re0sless

如何使用Delphi2007从firebird中的时间戳字段中获取毫秒值

  •  4
  • Re0sless  · 技术社区  · 17 年前

    我有一个Firebird数据库(在服务器版本2.1.3上运行),我正在使用DBExpress对象(使用Interbase驱动程序)与Delphi 2007连接

    我在数据库中的一个表如下所示

    CREATE TABLE MYTABLE
    (
      MYDATE Timestamp NOT NULL,
      MYINDEX Integer NOT NULL,
      ...
      Snip
      ...
      PRIMARY KEY (MYDATE ,MYINDEX)
    );
    

    但是当我做全选的时候( select * from MYTABLE

    这会导致重大问题,因为它是主键的一部分(不幸的是,我没有设计表,也没有修改它的权限)。

    我尝试了以下方法来获取毫秒值:

    sql1.fieldbyname('MYDATE').AsDateTime;
    sql1.fieldbyname('MYDATE').AsSQLTimeStamp;
    sql1.fieldbyname('MYDATE').AsStirng;
    sql1.fieldbyname('MYDATE').AsFloat;
    

    如何从时间戳中检索毫秒?

    更新: 如果这对将来的任何人都有帮助,下面是我为DBExpress尝试的驱动程序和结果。

    4 回复  |  直到 17 年前
        1
  •  5
  •   Jeroen Wiert Pluimers    17 年前

    我的一个同事( Edwin van der Kraan FIBplus

    他使用FIBPlus版本6.9.6和Firebird 2.1.1进行了检查。

    他插入一个当前的时间戳插入,并用 FormatDateTime('dd-mm-yyyy hh:nn:ss:zzz', TestpFIBDataSetMYDATE.Value) 然后他得到了日期和时间,包括毫秒。

        2
  •  4
  •   Craig Stuntz    17 年前

    我不知道Firebird是否支持毫秒,但我知道Delphi2007的InterBase驱动程序不支持毫秒。这是因为InterBase在其C API中不返回毫秒;尽管InterBase将日期时间存储为亚毫秒精度,但InterBase API在不包含毫秒字段的C TM结构中返回时间。因此,为InterBase设计的dbExpress驱动程序不支持这一点。所以,您至少需要更换驱动程序,假定Firebird实际上支持这一点。

        3
  •  3
  •   Milan BabuÅ¡kov    16 年前

    Firebird FAQ #305 解释如何通过简单的varchar CAST轻松解决此问题。

        4
  •  1
  •   Hugues Van Landeghem    17 年前