主: Access数据库中有两字段: dtTime1 dtTime2 皆为日期时间型
现求教(1)如何在显示时控制只显示dtTime1中的日期,或者时间,或者
         显示日期时间(最好是用SQL语句方式)
      (2)窗体中有四个DateTimePicker控件(Dpt1,Dpt2,Dpt3,Dpt4),Dpt1,Dpt2分别为起始时间的日期和时间,Dpt3,Dpt4分别为结束时间的日期和时间。
         现在我想用SQL语句查询起始时间到结束时间的数据。

解决方案 »

  1.   

    在SQLSERVER的帮助中输入CONVERT,里面有所有的日期格式
    如:要将日期显示格式定义成‘YYYY-MM-DD’的话,你可以用以语句
    SELECT CONVERT(VARCHAR(10),YOURDATETIMEFIELDNAME,112);
    要将日期显示格式定义成‘YYYY-MM-DD HH:NN:SS’的话,你可以用以语句
    SELECT CONVERT(VARCHAR(10),YOURDATETIMEFIELDNAME,120);
      

  2.   

    SORRY! 更正上面的最后一句:SELECT CONVERT(VARCHAR(19),YOURDATETIMEFIELDNAME,120);WITH ADOQUERY1 DO
       TRY
         CLOSE;
         SQL.CLEAR;
         SQL.ADD('SELECT * FROM YOURTABLENAME WHERE CONVERTAR,CDATETIMEFIELDNAME,120) BETWEEN :VBEGINDATETIME AND :ENDDATETIME');
         PARAMTERS.PARAMBYNAME('VBEGINDATETIME').VALUE:=FORMATDATETIME('YYYY-MM-DD'.DTP1.DATETIME)+' '+FORMATDATETIME('YYYY-MM-DD'.DTP2.DATETIME);
         PARAMTERS.PARAMBYNAME('VBEGINDATETIME').VALUE:=FORMATDATETIME('YYYY-MM-DD'.DTP3.DATETIME)+' '+FORMATDATETIME('YYYY-MM-DD'.DTP4.DATETIME);
        PREPARED;
        OPEN;
       EXCEPT
         MESSAGEBOX(SELF.HANGLE,'错误内容提示','提示',MB_OK);
         EXIT;
       END;
      

  3.   

    var
    StrTime,EndTime:TDateTime;
    begin
    StaTime:=Dpt1.date+Dpt2.Time;
    EndTime:=Dpt3.Date+Dpt4.Time;With Query do 
    begin
    Close;
    Sql.Clear;
    SQL.Add('select * from TableName where FieldName between :Q1 and :Q2');
    paramters.paramByName('Q1').Value:=StaTime;
    ParamTers.ParamByName('Q2').Value:EndTime;
    Open;
    end;
    end;
      

  4.   

    ghtghtmalone(malone)大哥:
       您好!
       我使用’SELECT CONVERT(VARCHAR(10),YOURDATETIMEFIELDNAME,112);‘他提示convert函数未定义,对了,还有我用的是ACCESS数据库,是不是跟SQL SERVER用法有所不同,
       还有:四个DateTimePicker控件(Dpt1,Dpt2,Dpt3,Dpt4)Dpt1 和Dpt3是日期,Dpt2,Dpt4是时间哦,请再麻烦你改一下哦,谢谢
      

  5.   

    hsmserver(小霍)大哥:
        您好!
       var
         StrTime,EndTime:TDateTime;
       begin
         StaTime:=Dpt1.date+Dpt2.Time; 
         EndTime:=Dpt3.Date+Dpt4.Time;
         这样得出的StaTime,和EndTime都是错误的
    我是用StaTime:=StrToDateTime(DateToStr(Dpt1.date)+' '+TimeToStr(Dpt2.Time));
      

  6.   

    那你可以自定义一个时间段
    时间是死的还是活的啊?
    如果是时间段
    你可以写成这样
    例如时间是10 点:
    StaTime:=Dpt1.Date+strTotime('10:00:00')这样写就可以了因为dpt2指定的时间是死的如果你指定的时间是现在那么就可以将now decodeTime
    然后再将时间合并到StaTime中
      

  7.   

    hsmserver(小霍)大哥:
        您好!
       var
         StrTime,EndTime:TDateTime;
       begin
         StaTime:=Dpt1.date+Dpt2.Time; 
         EndTime:=Dpt3.Date+Dpt4.Time;
         这样得出的StaTime,和EndTime都是错误的
    我是用StaTime:=StrToDateTime(DateToStr(Dpt1.date)+' '+TimeToStr(Dpt2.Time));
    应该可以的啊
    我前两天刚这么写
      

  8.   

    hsmserver(小霍)大哥:  
           您好!  
           谢谢你,第二个问题我已经解决了
    Var
      tSql:sTring;
      tStaTime1:TDateTime;
      tEndTime1:TDateTime;
    begin
      tStaTime1:=StrToDateTime(DateToStr(dtp1.Date)+' '+TimeToStr(dtp3.Time));
      tEndTime1:=StrToDateTime(DateToStr(dtp2.Date)+' '+TimeToStr(dtp4.Time));
      tSql:='Select sCardID AS 卡号,sCom AS 机号,dtTime1 As 上机时间,dtTime2 As 下机时间,iLength AS 使用时间,cEffect As 上机金额,sType AS 消费方式 From tLogs'
          +' WHERE (dtTime2>=:Q1) And (dtTime2<=:Q2)'
          +' Order By dtTime2';
      Qry1.Close;
      Qry1.SQL.Clear;
      Qry1.SQL.Add(tSql);
      Qry1.Parameters.ParamByName('Q1').Value:=tStaTime1;
      Qry1.Parameters.ParamByName('Q2').Value:=tEndTime1;
      Qry1.Open;
    end;
    你能告诉我如何只显示Access日期时间型字段的时间吗,
    比如我用
      tSql:='Select dtTime1 As DateTimeToTimeStamp(dtTime1) As 上机时间,DateTimeToTimeStamp(dtTime2) As 下机时间 From tLogs'
          +' WHERE (dtTime2>=:Q1) And (dtTime2<=:Q2)'
          +' Order By dtTime2';
     或者
       tSql:='Select dtTime1 As FormatDateTime('HH:MM:SS',dtTime1) As 上机时间,FormatDateTime('HH:MM:SS',dtTime2) As 下机时间 From tLogs'
          +' WHERE (dtTime2>=:Q1) And (dtTime2<=:Q2)'
          +' Order By dtTime2';
    都不行,好象错误都是指函数未定义
      

  9.   

    不要用时间格式,用字符串格式就OK了,我头今天也是遇到这种问题,呵呵,刚弄好。。你参考一下代码:
    Var
       ComDateTime1: String;
       ComDateTime2:String;
    begin
        ComDateTime1 := DateToStr(Date)+' 0:00:00';
        ComDateTime2 := DateToStr(Date)+' 23:59:59';
        QueryBody.SQL.Add('select * from ComTable where ((comdate>=:ComDateTime1_) and (ComDate<=:ComDateTime2_)) order by id DESC');
        Querybody.Parameters.ParamByName('ComDateTime1_').value := ComDateTime1;
        Querybody.Parameters.ParamByName('ComDateTime2_').Value := ComDateTime2;一切OK。我用的是Access2000。
      

  10.   

    用ADOQUERY:
    Var
       ComDateTime1: String;
       ComDateTime2:String;
    begin
        ComDateTime1 := DateToStr(Date)+' 0:00:00';
        ComDateTime2 := DateToStr(Date)+' 23:59:59';
        QueryBody.SQL.Add('select * from ComTable where ((comdate>=:ComDateTime1_) and (ComDate<=:ComDateTime2_)) order by id DESC');
        Querybody.Parameters.ParamByName('ComDateTime1_').value := ComDateTime1;
        Querybody.Parameters.ParamByName('ComDateTime2_').Value := ComDateTime2;用 QUERY:
    Var
       ComDateTime1: String;
       ComDateTime2:String;
    begin
        ComDateTime1 := FORMATDATETIME('YYYY-MM-DD',DTP1.DATE)' '+FORMATDATETIME('HH:NN:SS',DTP2.TIME);
        ComDateTime2 := FORMATDATETIME('YYYY-MM-DD',DTP3.DATE)' '+FORMATDATETIME('HH:NN:SS',DTP4.TIME);
        QueryBody.SQL.Add('select * from ComTable where comdate BETWEEN :VSTARTDATETIME AND :VENDDATETIME order by id DESC');
        Querybody.PARAMS[0].ASDATETIME := STRTODATETIME(ComDateTime1);
        Querybody.PARAMS[1].ASDATETIME := STRTODATETIME(ComDateTime2);
      

  11.   

    怎么还没结贴啊上次我都和你说过了肯定可以的这是我今天下午刚写过的
    例:
    var
    datestr:string;begin
    datestr:=formatdatetime('yy-mm-dd',dpt1.datetime);
    with query1 do
    begin
    close;
    sql.clear;
    sql.text:='select * FROM TableName where 字段名 between :A and :B';
    paramters.paramByName('A').value:=strTodatetime(dateSTR+' 00:00:00');
    paramters.paramByName('B').value:=strTodatetime(dateSTR+' 23:59:59');
    open;
    end;
    end;
      

  12.   

    获得日期:
    FormatDateTime('yyyy-mm-dd',dttime1.Date);
    获得时间:
    FormatDateTime('hh-mm-ss',dttime1.Time);
      

  13.   

    我在这里问一下 为什么我在access中查询
    SELECT *
    FROM t_customer
    WHERE idate=2004-6-3;数据没有呢
    SELECT *
    FROM t_customer
    WHERE idate>=2004-6-3;
    则,查出,全部的数据啊???????????
      

  14.   

    我也出现同样的问题!!!
    另外,我的数据库中字段格式是datetime的,我如何查找某年某月的全部记录呢???
      

  15.   

    用access数据库的sql语句中,时间类型的要加上#号SELECT *
    FROM t_customer
    WHERE idate>=#2004-6-3#;
      

  16.   

    客户端有个函数 formatdatetime('yyyy-mm-dd',Date)
    datetostr(Date)
    timetostr(Time)