回 帖 发 新 帖 刷新版面

主题:SQL中时间的比较!!!

比如有一个时间是2007-8-30,然后与当天时间比较,如果时间在2007-8-30范围内,提示“有效”,否则“失笑”,用程序怎么写呢?

回复列表 (共6个回复)

沙发

到底要在SQL语句中比较还是程序代码中比较?后者可用DateOf(DateTime1)=DateOf(DateTime2)。

板凳

if date()='2007-8-30' then
   showmessage('有效')
else
   showmessage('无效');

当然'2007-8-30'可能是你一张表里的信息,你先要查到它,然后可以给一个变量.让date()与这个变量作比较.

3 楼

你可以先定义一个时间变量,比如:date,然后date1:=now();将你数据库中的时间字段,比如是:date2,再定义两个字符串变量s1,s2,s1:=datetostr(date),  s2:=datestostr(date2);然后就可以比较了,
if(s1<>s2) then begin 
  showmessage('有效')
end;
esle
  showmessage('无效');

4 楼

[quote]到底要在SQL语句中比较还是程序代码中比较?后者可用DateOf(DateTime1)=DateOf(DateTime2)。[/quote]

如何在SQL语句中比较呢?

5 楼

在SQL语句中比较日期时间是比较麻烦的,因为它与具体的DBMS相关,也就是说对不同的DBMS写出的SQL语句是不一样的,有的DBMS可以用字符串表示日期,有的不可以,或者虽可以但表示方法与其他DBMS不同,因此在SQL语句中比较日期时间要知道所用DBMS的特性,甚至要了解DBMS的内建函数,下面是SQLSERVER的例子:

SELECT * FROM Reck
WHERE (Reck.OccurTime >= CONVERT(DATETIME, '2006-08-01', 102)) AND (Reck.OccurTime <= CONVERT(DATETIME, '2006-08-22', 102))

这个SQL语句放到ACCESS数据库中它就是错的了,因为ACCESS中没有内建CONVERT函数.

6 楼

补充: 因为上述原因,如果需要在SQL语句中比较日期时间应尽量采用参数化查询方式,这样可减少与具体DBMS的相关性。示例:

const
  SqlText:='SELECT * FROM Reck WHERE (Reck.OccurTime >= :D1) AND (Reck.OccurTime <= :D2)';
var
  D1,D2:TDateTime;
begin
  D1:=???;
  D2:=???;
  with ADOQuery1 do
  begin
    SQL.Text:=SqlText;
    Parameters.ParamByName('D1').DataType:=ftDateTime;
    Parameters.ParamByName('D1').Value:=D1;
    Parameters.ParamByName('D2').DataType:=ftDateTime;
    Parameters.ParamByName('D2').Value:=D2;
    Open;
    ......
  end;
end;

我来回复

您尚未登录,请登录后再回复。点此登录或注册