如果把‘09/12/2002’前加上个strtodate,是不是可以,我想你查询的字段类型应该和给出的条件类型一致。

解决方案 »

  1.   

    你的SQL没有错,你查询的结果也没有错!
    小于当前日期的当然是全部记录了
      

  2.   

    我在Sql Server 2000的联机帮助中看到《编写国际化 Transact-SQL 语句》这篇文章,觉得很有用,其中提到数据库中的日期时间问题。下面是我在delphi中的尝试:
    先写一个函数:
    function CreateGlobalTSQLString(ADateTime: TDateTime): string;
    var
      strDestDateTime: string;
    begin
      strDestDateTime := FormatDateTime('yyyy-mm-dd hh:mm:ss.zzz', ADateTime);
      Result := 'CONVERT(DATETIME,''' + strDestDateTime + ''',20)';
    end;然后在生成sql语句时这样写:
    ADODataSet1.CommandText := 'SELECT * FROM 订单 WHERE 订购日期 BETWEEN '+
      CreateGlobalTSQLString(DateTimePicker1.Date) + ' AND ' +
      CreateGlobalTSQLString(DateTimePicker2.Date) + ' ORDER BY 订购日期';这样就不用考虑DateTimePicker的日期格式和库中日期字段的格式的不同了。实际上这样处理就是告诉sql server我给你传进去的日期是什么格式的,剩下的事就是sql server的事了。我只在sql server 2000上测试通过。有兴趣的朋友可以试试其它的数据库。