假设你的字段名为Mydate。SQL.ADD(format('Select * from table1 where Mydate between "%s" and "%s"',[datetimetostr(Datetimepicker1.date),datetimetostr(Datetimepicker2.date)]));试一试。

解决方案 »

  1.   

    我不太最sql我用的是ttable控件我是這樣做的你參考一下
    字段為字符型
    table1.filtered:=true;
    table1.filter:='mydate>='+chr(39)+datetostr(datetimepicker1.date)+chr(39)+'and mydate<='+chr(39)+datetostr(datetimepicher1.date)+chr(39);
    直接顯示table1中的數据就行了
    table1.filter:='';
      

  2.   

    用FILTER:(假设你的生日字段名是Birthday)
    with Table1 do
    begin
      Filtered:=False;
      Filter:='Birthday>='+DateToStr(DateTimePicker1.Date)+' and Birthday<='+
        DateToStr(DateTimePicker2.Date);
      Filtered:=True;
    end;
      

  3.   

    这是个常用的查询方式:我从来没遇到过类型不匹配的问题var
       BeginTime,EndTime,str_sql:string;
    begin
      BeginTime:=FormatDateTime('yyyy-mm-dd',DtpBegin.date);
      EndTime:=FormatDateTime('yyyy-mm-dd',DtpEnd.date);  str_sql:='select * from tablename '+
               'where (生日字段 between '''+BeginTime+''' and '''+EndTime+''')';
      with Query do
      begin
        close;
        sql.clear;
        sql.add(str_sql);
        open;
      end;
    end;
      

  4.   

    最好用日期型datetime或smalldatetime,有了日期型可随心所欲的转化为字符型等,但反之易出错。
    procedure displayinfo;
    var bdate:string;
        edate:string;
    begin
      bdate:=formatdatetime('yyyy-mm-dd',DateTimePicker1.Date);
      edate:=formatdatetime('yyyy-mm-dd',DateTimePicker2.Date);
      str_sql:='select birthday from  tablename where birthday between ('''+bdate
        +''','''+edate+''')';
      query1.Active:=false;
      query1.sql.Clear;
      query1.sql.Add(str_sql);
      query1.Active:=true;
    end;
      

  5.   

    回复时没看到Dephli先生已回答