我在作日期查询时是这样的:
        sql.Add(' ((验收日期 >=:ysrq1) and (验收日期 <=:ysrq2))') ;
        ParamByName('ysrq1').AsDatetime:=d_ysrq1.Date;
        parambyname('ysrq2').AsDatetime:=d_ysrq2.Date;
查询结果中等于的部分不存在。
如果将参数的类型设置为AsDate则提示错误。我的数据库时sql server,字段类型时Datetime。

解决方案 »

  1.   


    sql.add(' 验收时间 between :ysrql and :ysrq2');
      

  2.   

    你也可以把参数都改成String型,赋值也是string。
      

  3.   

    用between啊
    sql.Add('验收时间 between :ysrq1 and :ysrq2') ;
    ParamByName('ysrq1').AsDatetime:=d_ysrq1.Date;
    parambyname('ysrq2').AsDatetime:=d_ysrq2.Date;
      

  4.   

    日期格式在sql server中可以用字符串的形式来表示,只要格式正确就行了
    所以你可以将asdatetime 改为相应的asstring 把后面的date  转换到string 
    顺便跟踪一下,你的sql 语句 看看是否有问题
      

  5.   

    其实你可以在SQL里试验。
    写SQL语句验证。
    如:select *
        from sj
        where rssj between '2001-1-1' and '2002-1-1'
      

  6.   

    ParamByName('ysrq1').Value:=FormatDateTime('yyyy-mm-dd',d_ysrq1.Date);
            parambyname('ysrq2').Value:=FormatDateTime('yyyy-mm-dd',d_ysrq2.Date);因为Delphi的时间从1899年开始,而SQL Server的时间从1900年开始,她们差两天,而无论在Delphi还是SQL Server中日期型都是通过数值型存储传递,所以就出现以上偏差,只有通过字符传递才不存在问题!
    同样,在其它数据库中也有类似错误,只是偏差不同而已!
      

  7.   

    一、再控制面板中把日期格式设置成YYYY-MM-DD格式;
    二、ADOQuery1.SQL.Add(' and convert(char(10),b.OperatData,120)=:p_date ');
        ADOQuery1.Parameters.ParamByName('p_date').Value:=datetostrDateTimePicker1.Date)
      

  8.   

    sql.Add(' ((验收日期 >='':ysrq1'') and (验收日期 <='':ysrq2''))') ;
      

  9.   

    1. 利用 BETWEEN AND 可以实现
    2. 在使用>=  或者 <=的时候 最大值 以及最小值 分别取的是 最小值 和 最大值
      

  10.   

    sql.Add(' ((验收日期 >=:ysrq1) and (验收日期 <=:ysrq2))') ;
            ParamByName('ysrq1').Asstring:=DateTostr(d_ysrq1.Date);
            parambyname('ysrq2').Asstring:=DateTostr(d_ysrq2.Date);
      

  11.   

    你的时间查询表达式我看不出什么错误。你要把时间表达式转化成字符串形式,然后传入查询,这样可以消除SQL server 和delphi对时间表示之间的差别。
      

  12.   

    查出原因: Hank(星星农场) 的对了,就是数值偏差。谢谢大家。
      

  13.   

    如果是等于肯定不能实现,因为sql中日期格式是精确的
    判断日期你可以用datepart,或者
    比如判断2003-5-1的数据你应该用 date between '2003-5-1' and '2003-6-1'date='2003-5-1'返回的只是date='2003-5-1 00:00:000'那一个时刻的数据!
      

  14.   

    datadiff(day,'1899-12-30',验收日期) betwen :ysrq1 and :ysrq2
            ParamByName('ysrq1').AsInteger :=Trunc(d_ysrq1.Date) ;
            parambyname('ysrq2').AsInteger :=Trucc(d_ysrq2.Date) + 1;
      

  15.   

    datadiff(day,'1899-12-30',验收日期) betwen :ysrq1 and :ysrq2
            ParamByName('ysrq1').AsInteger :=Trunc(d_ysrq1.Date) ;
            parambyname('ysrq2').AsInteger :=Trucc(d_ysrq2.Date) + 1;