如何使用Delphi 2007从firebird中的Timestamp字段获取毫秒值

Re0*_*ess 5 sql delphi firebird dbexpress delphi-2007

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

我在数据库中的一个表看起来像这样

CREATE TABLE MYTABLE
(
  MYDATE Timestamp NOT NULL,
  MYINDEX Integer NOT NULL,
  ...
  Snip
  ...
  PRIMARY KEY (MYDATE ,MYINDEX)
);
Run Code Online (Sandbox Code Playgroud)

我可以添加到表中,然后在Flame Robin中将时间戳字段显示为具有毫秒值.

但是当我select * from MYTABLE在表上选择all()时,我无法获得毫秒值,因为它总是以000返回.

这会导致重大问题,因为它是主键的一部分(遗憾的是我没有设计表并且无权更改它).

我尝试了以下内容来获取毫秒值:

sql1.fieldbyname('MYDATE').AsDateTime;
sql1.fieldbyname('MYDATE').AsSQLTimeStamp;
sql1.fieldbyname('MYDATE').AsStirng;
sql1.fieldbyname('MYDATE').AsFloat;
Run Code Online (Sandbox Code Playgroud)

但是格式化时他们都会返回14/09/2009 14:25:06.000.

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

更新: 如果这有助于将来的任何人,这里是我为DBExpress尝试的驱动程序和结果.

Jer*_*ers 5

我的一位同事(Edwin van der Kraan)刚刚检查过:它适用于FIBplus!

他检查了FIBPlus版本6.9.6和Firebird 2.1.1.

他插入一个current_timestamp插入,然后将其解压缩.FormatDateTime('dd-mm-yyyy hh:nn:ss:zzz', TestpFIBDataSetMYDATE.Value) 然后他返回日期和时间,包括毫秒.

--jeroen


Cra*_*ntz 4

我不知道 Firebird 是否真的支持毫秒,但我知道 Delphi 2007 的 InterBase 驱动程序不支持毫秒。这是因为 InterBase 在其 C API 中不返回毫秒;虽然 InterBase 将 DateTimes 存储到亚毫秒精度,但 InterBase API 在不包含毫秒字段的 C TM 结构中返回时间。因此,为 InterBase 设计的 dbExpress 驱动程序将不支持该功能。因此,假设 Firebird 实际上支持这一点,您至少需要更改驱动程序。