我有下面的脚本,从来没有检索任何数据,因为在火鸟/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;
// BEG_PERIOD和END_PERIOD是TimeStamp数据类型,例如'2010-11-09 12:00' //参数返回数据类型,例如'2010-11-09'
(*)时间戳是Firebird/Interbase/SQL Server中可用的列数据类型。这有助于确保数据完整性。每次插入或更新包含时间戳列的行时,时间戳都会自动更新。timestamp列中的值不是datetime数据,而是binary(8)varbinary(8)数据。timestamp数据类型与系统时间无关,它只是一个单调递增的计数器,其值在数据库中始终是唯一的(使其基本上是唯一的随机数)。
3条答案
按热度按时间esbemjvw1#
你是不是误解了Firebird中的TIMESTAMP数据类型?在SQL 92中,TIMESTAMP是一种标准数据类型,用于保存日期和时间值。它不会自动更新,并且返回TIMESTAMP值的函数与数据库时间相关。
FirebirdTIMESTAMP实现遵循SQL 92规则,它应该可以完美地使用 Delphi .AsDateTime参数。
它是SQL Server TIMESTAMP,正如您所描述的那样-并且永远不应与日期和时间进行比较,“SQL Server timestamp数据类型与时间或日期无关”http://msdn.microsoft.com/en-us/library/ms191240(SQL.90).aspx
6yjfywim2#
一个用 Delphi 写的UDF。它获取日期的三个部分,并以Firebird格式返回日期值。也许这将帮助您了解如何在 Delphi 和FB之间转换日期。
gywdnpxw3#
通常,我使用它作为字符串参数,因为时间部分。想法是设置独立格式,例如“11-NOV-2010 12:32:25”
例如,您可以尝试
你应该有类似的功能
请注意,您还可以在服务器端使用SQLExtract进行一些工作
参见
EXTRACT
的文档。