VARCHAR上进行>=等时间比较是不可靠的,

解决方案 »

  1.   

    就算是datetime类型的也是一样,我试过了
      

  2.   

    会不会是2012-12-2 00:00:00这种格式不符合要求,sqlite中yyyy-MM-dd HH:mm:ss才被识别为日期,也就是说月份和日都需要2位才行。http://www.sqlite.org/lang_datefunc.html
      

  3.   

    你写成:select * from ReturnGoodsMains where datetime(ReturnDate)>='2012-12-02 00:00:00' and datetime(ReturnDate)<'2012-12-03 00:00:00' ;
    试试。
      

  4.   

    '2012-12-03 00:00:00' 转成datetime类型在比较试试,应该是时间格式问题
      

  5.   

    把时间类型转换为varchar类型的呢
    select * from #table where varchar(16,getdate(),120) between '2012-12-02 00:00' and '2012-12-10 00:00'
      

  6.   

    把时间类型转换为varchar类型的呢
    写错了,更正,呵呵
    select * from #table where CONVERT(varchar(16),getdate(),120) between '2012-12-02 00:00' and '2012-12-10 00:00' 
      

  7.   

    select * from ReturnGoodsMains where datetime(ReturnDate)>=datetime('2012-12-2 00:00:00') and datetime(ReturnDate)<datetime('2012-12-3 00:00:00')这样试下,应该能返回数据
    select * from ReturnGoodsMains where ReturnDate>='2012-12-2 00:00:00' and ReturnDate<'2012-12-10 00:00:00' ;
     执行后没有结果
    这个是因为你数据库中存放的是字符串,而对于字符串的比较是按字母一个一个比较的,而字母'2012-12-2中的2大于'2012-12-1中的1所以查询不出数据来
      

  8.   

    用日期时间型
    不要用nvarchar
      

  9.   

    DateTime dt=Convert.ToDateTime("2012-12-3 00:00:00");
    1. dt.ToString("yyyy-MM-dd HH:mm:ss")
    2. dt.ToString("s")

    这样试试
    再不行就看看你sqlite那个IED里的时间格式是什么
      

  10.   

    select * from ReturnGoodsMains 
    where CONVERT(datetime, ReturnDate)>='2012-12-2 00:00:00' 
    and CONVERT(datetime,ReturnDate)<'2012-12-3 00:00:00' ;select * from ReturnGoodsMains 
    where ReturnDate>='2012-12-2 00:00:00' 
    and ReturnDate<'2012-12-3 00:00:00' ;select * from ReturnGoodsMains 
    where ReturnDate>='2012-12-2 00:00:00'
    and ReturnDate<'2012-12-10 00:00:00' ;
    前2中可以查出一条数据,最后一种不能查出数据。原因是:ReturnDate的类型是varchar,也就是字符串了,那如果是字符串比较,这这样where ReturnDate>='2012-12-2 00:00:00'
    and ReturnDate<'2012-12-10 00:00:00'就绝对查不出数据的,字符串比较的时候会先从第一个字符比较,如果第一个字符相等,则就比较第2个字符,以此类推, ReturnDate<'2012-12-10 00:00:00' 当比较到‘2012-12-’的时候前面都有匹配的,则开始比较1,由于此时数据库中是不存在比“2012-12-1”还小的数据,所以就查不出。
      

  11.   

    select * from ReturnGoodsMains where datetime(ReturnDate)>=datetime('2012-12-02 00:00:00') and datetime(ReturnDate)<datetime('2012-12-03 00:00:00')
      

  12.   

    用SQLiteManager可以查出来,用程序就不行(以前是可以的,代码没有变过)select source,equipId,opaId,icuaId,[time],updateTime,status,otherInfo,data,ReturnValue from CollectData where updateTime>="2014-12-25 00:00:00" and updateTime<"2014-12-25 11:45:00" Order By updateTime desc limit 1000