数据库中BreakTime是日期/时间型的,在MFC程序中,使用了时间控件,定义了两个CTime类型的m_DataBegin与m_DataTimeEnd,现在想在查询数据库中介于开始时间与结束时间之间的BreakTime记录。SQL语句应该怎么写

解决方案 »

  1.   

    建立一个存储过程,m_DataBegin与m_DataTimeEnd作为两个参数,给入到存储过程,然后按条件选取.
      

  2.   

    select  BreakTime记录  from tb  where  时间  between m_DataBegin and m_DataTimeEnd--orselect  BreakTime记录  from tb  where  时间  > m_DataBegin and 时间 <m_DataTimeEnd
      

  3.   

    我一直是这么写的,但是一直有问题,你确定sql语句对吗
      

  4.   

    between  and 是>= <=,是包括=的,你要考虑好你的“介于”是否包含等于,如果不是,那么就要用<和>了
      

  5.   

    那使用between and会出现什么“异常”?导致你要发帖?
      

  6.   

    用Between and判断时,前后的字段类型要一致。
      

  7.   

    运行起来是debug error,我刚刚接触数据库,我是这样写的
    CString SelectSQL = "select TPlateNum.PlateNum, TPlateNum.BreakTime,TCarInfo.OwnerName,TCarInfo.OwnerID, TCarInfo.OwnerPhone from TPlateNum,TCarInfo where '"+m_strCarQueryText+"' = TCarInfo.OwnerName and TPlateNum.PlateNum = TCarInfo.PlateNum and TPlateNum.BreakTime between m_DataTimeBegin and m_DataTimeEnd ";
    _RecordsetPtr pRecordset = m_database.Select(SelectSQL); 两个表之间查询某个时间段中的记录
      

  8.   

    CString SelectSQL = "select TPlateNum.PlateNum, TPlateNum.BreakTime,TCarInfo.OwnerName,TCarInfo.OwnerID, TCarInfo.OwnerPhone from TPlateNum,TCarInfo where '"+m_strCarQueryText+"' = TCarInfo.OwnerName and TPlateNum.PlateNum = TCarInfo.PlateNum and TPlateNum.BreakTime between '''+datetostr(m_DataTimeBegin) +''' and '''+ datetostr(m_DataTimeEnd )+''' ";
    _RecordsetPtr pRecordset = m_database.Select(SelectSQL);datetostr()是时间转成字符串,具体语言怎么转灵活变化
      

  9.   

    CString SelectSQL = "select TPlateNum.PlateNum, TPlateNum.BreakTime,TCarInfo.OwnerName,TCarInfo.OwnerID, TCarInfo.OwnerPhone from TPlateNum,TCarInfo where   TCarInfo.OwnerName='"+m_strCarQueryText+"' and TPlateNum.PlateNum = TCarInfo.PlateNum and TPlateNum.BreakTime between m_DataTimeBegin and m_DataTimeEnd ";
     _RecordsetPtr pRecordset = m_database.Select(SelectSQL);你把红字那里调过来按我这个来写看看
      

  10.   

    那你能把CString SelectSQL = "select TPlateNum.PlateNum, TPlateNum.BreakTime,TCarInfo.OwnerName,TCarInfo.OwnerID, TCarInfo.OwnerPhone from TPlateNum,TCarInfo where TCarInfo.OwnerName='"+m_strCarQueryText+"' and TPlateNum.PlateNum = TCarInfo.PlateNum and TPlateNum.BreakTime between m_DataTimeBegin and m_DataTimeEnd ";这段语句打印出来吗?先不执行,然后放到SQLServer里面执行看看
      

  11.   

    我这样转换成CString可以吗CString m_dataBegin=m_DateTimeBegin.Format( "%Y-%m-%D");
    CString m_dataEnd=m_DateTimeEnd.Format( "%Y-%m-%D");
      

  12.   

    用Messagebox看了一下,竟然是输出的前面的略过,***,TPlateNum.BreakTime between m_DataTimeBegin and m_DataTimeEnd 
      

  13.   

    另外在access数据库中用那个语句是可以查询的
      

  14.   

    ACCESS查询时是手动输入的起止时间,难道是因为程序中的两个开始与结束时间是CTime类型的吗
      

  15.   

    access在部分语法上和SQLServer不兼容的,另外***,TPlateNum.BreakTime between m_DataTimeBegin  那个逗号是什么意思?是打印出来的?还是你要区分而已?
      

  16.   

    只是说明前面的没问题,另外
    CString m_dataBegin=m_DateTimeBegin.Format( "%Y-%m-%d");
    CString m_dataEnd=m_DateTimeEnd.Format( "%Y-%m-%d");
    SelectSQL = "select TPlateNum.PlateNum, TPlateNum.BreakTime,TCarInfo.OwnerName,TCarInfo.OwnerID, TCarInfo.OwnerPhone from TCarInfo,TPlateNum where '" +m_strCarQueryText+"' = TCarInfo.OwnerName and TCarInfo.PlateNum=TPlate.PlateNum and '"+m_dataBegin+"'<=TPlateNum.BreakTime and '"+m_dataEnd+"'>=TPlateNum.BreakTime";
    Message打印时时间段确实是在MFC控件中选定的那个时间,但是还有debug error
      

  17.   

    解决了,我是这样写的:
    CString m_dateBegin = m_DateTimeBegin.Format( "%Y-%m-%d %H:%M:%S");
    CString m_dateEnd = m_DateTimeEnd.Format( "%Y-%m-%d %H:%M:%S");
    SelectSQL = "select TPlateNum.PlateNum, TPlateNum.BreakTime,TPlateNum.DealState,TCarInfo.OwnerName,TCarInfo.OwnerID, TCarInfo.OwnerPhone from TPlateNum,TCarInfo where TCarInfo.OwnerName = '"+m_strCarQueryText+"' and TPlateNum.PlateNum = TCarInfo.PlateNum and TPlateNum.BreakTime BETWEEN #" + m_dateBegin + "# AND #"+m_dateEnd+"# ";