IF COMBOBOX7.Text='' THEN
   application.MessageBox(pchar('请选择时'),'提示',48)
   else
   begin
     date:=datetostr(datetimepicker1.Date);
     date1:=datetostr(datetimepicker1.Date)+' '+combobox7.Text+':00:00';
  query1.Close;
  query1.SQL.clear;
  query1.SQL.Add('select SVL_DATE AS 日期,SVL_CALLER AS 主叫号,SVL_AGENTID AS 坐席号,SVL_CLASSNAME AS 受理项目,SVL_MEMO AS 详情 from CRM_SUNTEK_SERVICELOG where datediff(day,SVL_DATE,'''+date+''')=0 and datediff(hour,SVL_DATE,'''+date1+''')=0');
  query1.Open;
   end;SVL_DATE的日期格式是‘2002-9-9 13:20:13’,我先在要对某天的某时进行统计,比如说13时,但是在14时也能统计出13时的记录。不知道为什么,请各位帮忙看看,代码有什么问题。

解决方案 »

  1.   

    datediff函数的问题,因为2002-9-9 14:00:00-2002-9-9 13:20:13<一小时,所以结果为0。
    date在SQL中用实数存储,你可以在SQL语句中写参数,在Delphi中比较,如:
    datetimetoint(2002-9-9 14:00:00)>SVL_DATE>datetimetoint(2002-9-9 13:00:00)
    临时写的,自己调一下。
      

  2.   

    你的SQL可能存在两个问题:
    1。你对DateDiff函数不熟悉 
       DateDiff(日期格式,起始日期,结束日期)它是用起始日期减去结束日期的。
    2。你的SVL_Date是一个字段,不是一个固定值,你没有经过过滤。
      

  3.   

    更正:
    注:DateDiff(日期格式,起始日期,结束日期)起始日期是从结束日期中减去的。
      

  4.   

    query1.SQL.Add('select SVL_DATE AS 日期,SVL_CALLER AS 主叫号,SVL_AGENTID AS 坐席号,SVL_CLASSNAME AS 受理项目,SVL_MEMO AS 详情 from CRM_SUNTEK_SERVICELOG where datediff(day,SVL_DATE,'''+date+''')=0 and DatePart(Hour,SVL_DATE)=DatePart(Hour,''' + Date + ''')');
      

  5.   

    搞定了。。确实是对datediff函数不熟悉。多谢各位:特别是密码错误 老兄。。发分了。。