我想根据日期来进行查询,要求查询两个日期中间的所有记录。有两种方法:方法一:在filter属性中进行筛选   
         我设置为: shijian > 03-2-1                       //可以得到正确的结果
         但如果是: shijian between 03-2-1 and 03-5-1      //则错误         又用:     shijian like 03-2-1                    //也可以得到正确的结果
         再用:     shijian like 03 或者 shijian like 03-2 //则错误  方法二:更改Query组件的SQL语句
       dm.ADOQueryTJ.Close;
       dm.ADOQueryTJ.Clear;
       dm.ADOQueryTJ.SQL.Add(sql);
       dm.ADOQueryTJ.ExceSQL;
       dm.ADOQueryTJ.Open;       变量SQL为(以下是别人给我及我搜索到的答案):
       1、sql:='select * from xiaoshoujilu where like '''%03-3%'''';
 
       2、sql:='select * from xiaoshoujilu where shijian between '+''''+'03-2-1'+''''+
                                                             ' and '+''''+'03-4-30'+'''';
  
       3、sql:='select * from xiaoshoujilu where shijian between ''03-2-1'' and ''03-4-30''';
        
       4、sql:='select * from xiaoshoujilu where shijian between '02-2-1' and '03-6-1'";       5、sql:='select * from xiaoshoujilu where shijian between #02-2-1# and #03-6-1#';       6、sql:='select * from xiaoshoujilu where like %03-3%';
        
以上sql语句经过调试后,全部不能得到正确的结果。
我是使用delphi6的ADOQuery组件,数据库是用ACCESS2000建立的,数据库名sss包含xiaoshoujilu表。
  
期盼着那位大虾能够解决这个问题,或者提供其它方法来完成这种查询。 谢谢大家。

解决方案 »

  1.   

    sql:='select * from xiaoshoujilu where shijian between #2002-2-1# and #2003-6-1#';
      

  2.   

    sql:='select * from xiaoshoujilu where shijian>=#02-2-1# and shijian<=#03-6-1#'
      

  3.   

    以下方法绝对正确,适用任何数据库(除非数据库不支持日期查询)sql:='select * from xiaoshoujilu where shijian between :startdate and :enddate';
    dm.ADOQueryTJ.Close;
    dm.ADOQueryTJ.Clear;
    dm.ADOQueryTJ.SQL.Add(sql);
    dm.ADOQueryTJ.Parameters.ParamByName('startdate').DataType = ftDate;
    dm.ADOQueryTJ.Parameters.ParamByName('startdate').value = EncodeDate(2002, 2, 1);
    dm.ADOQueryTJ.Parameters.ParamByName('enddate').DataType = ftDate;
    dm.ADOQueryTJ.Parameters.ParamByName('enddate').value = EncodeDate(2003, 5, 1);
    dm.ADOQueryTJ.Open;
      

  4.   

    又是数据库的时间跟DELPHI时间转变,我最头疼这个了,有时候认为应该可以转变的,却是错误,认为不可能的,却是正确,麻烦
      

  5.   

    try:
      dm.ADOQueryTJ.Close;
      dm.ADOQueryTJ.Clear;
      sql := 'select * from xiaoshoujilu where shijian >= :date1 and <= :date2';  
      dm.ADOQueryTJ.SQL.Add(sql);
      dm.ADOQueryTJ.Parameters.Values('date1'):= StrToDate('2003-2-1');
      dm.ADOQueryTJ.Parameters.Values('date2'):= StrToDate('2003-5-1');
      dm.ADOQueryTJ.ExceSQL;
      dm.ADOQueryTJ.Open;
      

  6.   

    try new:
      dm.ADOQueryTJ.Close;
      dm.ADOQueryTJ.Clear;
      sql := 'select * from xiaoshoujilu where shijian >= :date1 and <= :date2';  
      dm.ADOQueryTJ.SQL.Add(sql);
      dm.ADOQueryTJ.Parameters.ParamByName('date1').Values:= StrToDate('2003-2-1');
      dm.ADOQueryTJ.Parameters.ParamByName('date2').Values:= StrToDate('2003-5-1');
      dm.ADOQueryTJ.ExceSQL;
      dm.ADOQueryTJ.Open;