我用adoquery 查询时间,可当在edit1内输入查询条件时,比如:当输入1999时,能进行模糊查询到时间日期内包含1999的记录。可当输入1999-1-1时,就返回一条空的记录。为什么?我的时间字段是datetime类型的。我的代码是:
procedure TFormfind.Button2Click(Sender: TObject);
var
  d1:string;
  d2:string;
begin
      if combobox1.text='合同日期' then
      begin
      adoqfind.close;
      adoqfind.sql.Clear;
      s1:=edit1.Text;
      s2:='select * from table where date like ''%'+s1+'%''';
      adoqfind.SQL.Add(s2);
      adoqfind.Open;
      end;

解决方案 »

  1.   

    什么数据库?access需要加#,#2003-04-11#
    sql.text := 'select * from Tvs  where (cstr(dateb) #' + datetimepicker1.date-1 + '#) and (cstr(dateb) ) #'+ datetimepicker2.date+1 +'#) ';
    open;
      

  2.   

    改成下面的样子:
    s2:='select * from table where to_char(date,'yyyy-m-d') like ''%'+s1+'%''';
      

  3.   

    Access的日期使用#的 #2002-12-31#, ' where rq between #'+datetimetostr(encodedate(year,month,1))+'# and #'+datetimetostr(encodedate(year,month,31)) +'#';
      

  4.   

    忘记说了,我用的是sql数据库,那我的代码怎么改才行呢?
    to pluto:你的那句我试了,不行。出错啦
      

  5.   

    你是用的什么数据库,你要搞清数据库里面日期时间格式怎么转换成字符串格式才能进行 Like ......  'select * from table where to_char(date,'yyyy-m-d') like ''%'+s1+'%'''是Oracle使用的方式,Sql Server就不一定是这样了
      

  6.   

    我用的是sql server 的,那sql该怎么写?
      

  7.   

    下面的语句在SQL Server 2000 上能通过,看你能不能画好瓢
    select * from tinbill where convert(varchar(21),fdate,21) like '%2003-08-26%'
      

  8.   

    SELECT *
    FROM aaa
    WHERE DATEDIFF(day, ddd, '1999-1-1') = 0
      

  9.   

    SELECT *
    FROM aaa
    WHERE DATEDIFF(year, ddd, '1999-1-1') = 0