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