使用Delphi 6和Microsoft SQL Server 2000。
我需要提取TDateTime字段所在的记录。通过了TDateTime,“FromDate” 它失败,好像传递的TDateTime的秒数的小数部分总是为零 调试打印输出确认分数在那里。
WHERE部分忽略了Fdate的小数部分
假设以下3条记录:
记录1:Time_Stamp是1.2
记录2:Time_Stamp是1.4
记录3:Time_Stamp为1.6
然后将值1.3发送到查询:Fdate 生成的数据集返回所有3条记录 我预计只有记录2和3,因为1.3> 1.2
数据库中的'Time_Stamp'字段是SQL'datetime'字段
一切都适用于整数秒,
即,当小数部分不重要时,每秒一个记录,或者更少。
有人可以指出我的错误在哪里吗?
SQL语句由代码生成(如下所示),如下所示:
SELECT TOP 6 * FROM T_TransactionLog
INNER JOIN T_LookUp_TransTypes
ON T_TransactionLog.TransType = T_LookUp_TransTypes.TransType
WHERE (Time_Stamp >= :Fdate)
AND T_TransactionLog.TransType IN (
3,
4,
5
)
AND LockerNo < 60001
ORDER BY Time_Stamp ASC
代码如下:
Query.Connection := Sys_DB_Form.ADOConnection;
DataSource.DataSet := Query;
Query.SQL.Add('SELECT TOP ' + IntToStr(cNoTransactions) + ' * FROM
T_TransactionLog');
Query.SQL.Add('INNER JOIN T_LookUp_TransTypes');
Query.SQL.Add('ON T_TransactionLog.TransType =
T_LookUp_TransTypes.TransType');
Query.SQL.Add('WHERE (Time_Stamp ' + S_Condition + ' :Fdate)');
Query.SQL.Add('AND T_TransactionLog.TransType IN (');
Query.SQL.Add(IntToStr(ord(Apl_TrLog.ttEA)) + ',');
Query.SQL.Add(IntToStr(ord(Apl_TrLog.ttMO)) + ',');
Query.SQL.Add(IntToStr(ord(Apl_TrLog.ttMC)));
Query.SQL.Add(')');
Query.SQL.Add('AND LockerNo < ' +
IntToStr(Apl_Config.cLNoOfFirstgate));
if Locker <> 0 then
begin
Query.SQL.Add('AND LockerNo = ' + IntToStr(Locker));
end;
Query.SQL.Add(S_OrderBy);
Query.Parameters.FindParam('Fdate').Value := FromDate; // <<< Fail????
Query.SQL.SaveToFile(GetApplicationDataPath + 'Sql.txt');
try
Query.Open;
except
ShowMessage('Query open fail on ME Show Transaction log');
end;
答案 0 :(得分:1)
请在MSDN上查看SQL Server datetime and time data types的准确性说明
写道: 精度舍入为.000,.003或.007秒的增量
这意味着 23:59:59.997 没关系 但 23:59:59.998 将四舍五入到23:59:59.997 和 23:59:59.999 将在第二天四舍五入到00:00:00