比如说:窗体中有两个Edit,一个用来输入年,一个用来输入月。而数据库的表中有一个日期型的字段。
现在取数据库中的数据要满足这样的条件:数据库中的这个日期类型的字段的值,应该在你输入的年月内。
也就是说,假设数据库中的值是:2004/09/09, 而你输入的值分别是:2004 和 09,则这是符合条件的。
简单的说,就是数据库中的值的年月跟你输入的年月一样就行。请问这样的select条件怎么实现?(关键是两个数据的类型不一样)先谢谢了

解决方案 »

  1.   

    select * from Table where 日期字段 between cast('20040801',datetime) and cast('20040831',datetime) //自己再改一下
      

  2.   

    select * from t1
    where CONVERT(Varchar(7), t, 120) = '2004-09'
      

  3.   

    syear:=copy(fieldname('date'),1,4);
    smonth:=kcopy(fieldname('date'),6,2);//copy函数用来取得一个字符串的子串,fieldname('date')是你数据库中存日期的字段名。
    需要先转换:DateToStr(fieldname);或者是fieldbyname('字段名').asstring;
    //
      

  4.   

    with adoquery1 do
      begin
        sql.Clear;
        sql.Add('select * from test where CONVERT(char(7),dd, 111) ='''+edit1.text+'/'+edit2.text+'''');
        open;
      end;
    调试通过
      

  5.   

    我是这样用的:
    'select * from test where CONVERT(char(7),dd, 111) ='''+:sYear+'/'+:sMonth+''''Parameters.ParamByName('sYear').Value := Edt_Year.Text ;
    Parameters.ParamByName('sMonth').Value := Edt_Month.Text ;这样的话,会提示sql语句后面的有错误。请问怎么修改。
      

  6.   


    select datepart(YY,getdate()), datepart(MM,getdate())
      

  7.   

    sql.Add('select * from test where CONVERT(char(7),dd, 111) =:syear');
        Parameters.ParamByName('sYear').Value := edit1.Text+'/'+edit2.Text;
      

  8.   

    楼主给你一个比较笨阿办法,但是应该最好理解吧
     var
     Year, Month,day: Word;  DecodeDate(now, Year, Month, Day);//把日期分解开
    然后再select