用当前的日期于数据库中的值进行比较。
curdate 当前日期
datevalue 数据库值
curdate > datevalue 已到期
curdate <= datevalue 未到期
当curdate = datevalue 时不能进行正确的比较。
例如:
var
curdate ,datevalue : TDateTime;
s : string;
begin
curdate := new ;
datevalue ;= query.Fields.Fields[1].AsDatetime;
if curdate > datevalue then s := '已到期';
if curdate <= datevalue then s:= '未到期';
现在的问题是当 不能正确的比较两个日期相等。请大家帮我看看。
end;
数据库里日期字段什么类型?
比较是否要精确到hh:mm:ss?
那你试试换成string类型比较
datetimetostr()
因为即使你输入两个一样的数,存储计算后也会有差异。
对浮点数
if curdate <= datevalue then //不行if (curdate - datevalue) < 1/(24*3600);//可以
就是不能正确的进行相等的比较。
大家可以试试这个例子;
var
s1 ,s2 : TDateTime;
begin
s1:= now;
s2:= now ;
if s1 = s2 then
showmessage('s1 = s2')
else
showmessage('not');如果直接运行是没有错的。会运行到第一个showmessage;
但是进行断点调试就会运行第二个showmessage;
用别的试试
s1 ,s2 : TDateTime;
begin
s1:= now;
s2:= now ;
if s1 = s2 then
showmessage('s1 = s2')
else
showmessage('not');
进行断点调试就会运行第二个showmessage,这时now可能已经变了,所以s1和s2不一样了
你看看这个行不行
curdate <= datevalue and curdate >= datevalue
我按你的方法试了一下,还是不行的。
s1 ,s2 : TDateTime;
st : string;
begin // s1:= StrToDateTime('2004-8-9'); 如果用这个语句就没有问题
st := datetimetostr(now);
s1:= strtodatetime(st); 如果用这个语句还是会执行showmessage('s1 > s2') ;
s2:= StrToDateTime('2004-8-9'); if s1 = s2 then
showmessage('s1 = s2') ;
if s1 > s2 then
showmessage('s1 > s2') ; if s1 < s2 then
showmessage('s1 < s2') ;大家一定要帮我啊。必须要与当前的日期进行比较。
我跟你说一说sql sever 2000在这方面的解决方法(我把他们当成字符来处理):
由于在Datetime的数据类型中,它除了日期外还有时间,在一般情况下,我们认为只要是日期相等就算这两个时间相等.但是由于datetime中含有时间,我们可以通过下面的方式处理:
假设我们的日期是2004.08.09,要找到与这个日期相关的数据来
=:
Select *
From Table
WHere datevalue between '2004-08-09 00:00:00' and '2004-08-09 23:59:59'
>:
Select *
From Table
WHere datevalue>'2004-08-09 23:59:59'
<:
Select *
From Table
WHere datevalue<'2004-08-09 00:00:00'
方法是:
取出now的值DateToStr;
取出数据库中的值:asstring;
然后比较就ok了。
这一点只进行相等这一条件比较。