如何比较Firebird TimeStamp和Delphi DateTime?

vol*_*vox 0 sql delphi firebird

我有以下脚本永远不会检索任何数据,因为Firebird/Interbase中的TimeStamp数据类型不是DateTime(*)

我应该怎么解决?TX.

 with DMApp.qryValidPeriod_ do
  begin
    Close;
    SQL.Clear;
    SQL.Add('select P.* from PERIOD P, FISCAL_YR F');    
    SQL.Add('where');
    SQL.Add('P.FISCAL_YR_ID = F.FISCAL_YR_ID and');     
    SQL.Add('F.ENTITY_DB_ID = :PRIMARY_DB_ID and');     
    SQL.Add('F.FISCAL_YR_ID = :CURR_FY_ID and');        
    SQL.Add(':pTranDate BETWEEN P.BEG_PERIOD and P.END_PERIOD');

    ParamByName('pTranDate').AsDateTime :=  sBATCH_DATE; 
Run Code Online (Sandbox Code Playgroud)

// BEG_PERIOD和END_PERIOD是TimeStamp数据类型,例如'2010-11-09 12:00'//参数返回数据类型,例如'2010-11-09'


(*)时间戳是Firebird/Interbase/SQL Server中可用的列数据类型...有助于确保数据完整性.每次插入或更新包含时间戳列的行时,时间戳都会自动更新.timestamp列中的值不是datetime数据,而是binary(8)varbinary(8)数据.timestamp数据类型与系统时间无关,它只是一个单调递增的计数器,其值在数据库中始终是唯一的(使其基本上是一个唯一的随机数.)

小智 5

是不是你误解了Firebird中的TIMESTAMP数据类型?在SQL92中,TIMESTAMP是一种标准数据类型,用于保存日期和时间值.它不会自动更新,返回TIMESTAMP值的函数与数据库时间有关.

AFAIK,Firebird TIMESTAMP实现遵循SQL 92规则(http://www.firebirdsql.org/index.php?op=guide&id=ib6_newfeatures#datetime),它应该与Delphi .AsDateTime参数完美配合.

正如您所描述的那样是SQL Server TIMESTAMP - 并且永远不应该与日期和时间进行比较,"SQL Server时间戳数据类型与时间或日期无关" http://msdn.microsoft.com/en-我们/库/ ms191240(SQL.90)的.aspx