当前位置:编程学习 > C#/ASP.NET >>

SQLite 按时间段查询日期 显示数据问题

--创建表
CREATE TABLE ReturnGoodsMains ( 
    ReturnSysID   VARCHAR NOT NULL,
    ReturnDate    VARCHAR,
    PRIMARY KEY ( ReturnSysID ) 
);
--添加数据
insert into ReturnGoodsMains (ReturnSysID,ReturnDate) values('63X01105030497201212020001','2012-12-2 16:14:49');
insert into ReturnGoodsMains (ReturnSysID,ReturnDate) values('63X01105030497201212020002','2012-12-1 16:15:43');
insert into ReturnGoodsMains (ReturnSysID,ReturnDate) values('63X01105030497201212020003','2012-12-9 16:16:12');
insert into ReturnGoodsMains (ReturnSysID,ReturnDate) values('63X01105030497201212020004','2012-12-6 16:18:18');
insert into ReturnGoodsMains (ReturnSysID,ReturnDate) values('63X01105030497201212020005','2012-12-9 16:19:30');
insert into ReturnGoodsMains (ReturnSysID,ReturnDate) values('63X01105030497201212020006','2012-12-9 16:20:01');



问题来了:
select * from ReturnGoodsMains where datetime(ReturnDate)>='2012-12-2 00:00:00' and 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' ;

执行后显示结果:63X01105030497201212020001 2012-12-2 16:14:49  正确
select * from ReturnGoodsMains where ReturnDate>='2012-12-2 00:00:00' and ReturnDate<'2012-12-10 00:00:00' ;
执行后没有结果。请问大家这是怎么回事,弄两天了就是查不出来。 --------------------编程问答-------------------- VARCHAR上进行>=等时间比较是不可靠的, --------------------编程问答--------------------
引用 1 楼 stonespace 的回复:
VARCHAR上进行>=等时间比较是不可靠的,
就算是datetime类型的也是一样,我试过了。。。 --------------------编程问答-------------------- 会不会是2012-12-2 00:00:00这种格式不符合要求,sqlite中yyyy-MM-dd HH:mm:ss才被识别为日期,也就是说月份和日都需要2位才行。

http://www.sqlite.org/lang_datefunc.html --------------------编程问答-------------------- 你写成:select * from ReturnGoodsMains where datetime(ReturnDate)>='2012-12-02 00:00:00' and datetime(ReturnDate)<'2012-12-03 00:00:00' ;
试试。 --------------------编程问答-------------------- '2012-12-03 00:00:00' 转成datetime类型在比较试试,应该是时间格式问题 --------------------编程问答-------------------- 把时间类型转换为varchar类型的呢
select * from #table where varchar(16,getdate(),120) between '2012-12-02 00:00' and '2012-12-10 00:00' --------------------编程问答-------------------- 把时间类型转换为varchar类型的呢
写错了,更正,呵呵
select * from #table where CONVERT(varchar(16),getdate(),120) between '2012-12-02 00:00' and '2012-12-10 00:00'  --------------------编程问答-------------------- 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所以查询不出数据来 --------------------编程问答-------------------- 要把时间转换格式,

以前我遇到过这个问题。

本想发源码 但没找到那个项目,   --------------------编程问答-------------------- 用日期时间型
不要用nvarchar
--------------------编程问答--------------------
引用 3 楼 dalmeeme 的回复:
会不会是2012-12-2 00:00:00这种格式不符合要求,sqlite中yyyy-MM-dd HH:mm:ss才被识别为日期,也就是说月份和日都需要2位才行。

http://www.sqlite.org/lang_datefunc.html

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里的时间格式是什么 --------------------编程问答--------------------
--------------------编程问答-------------------- 以上结果 Sqlite3.0 --------------------编程问答-------------------- 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”还小的数据,所以就查不出。 --------------------编程问答-------------------- select * from ReturnGoodsMains where datetime(ReturnDate)>=datetime('2012-12-02 00:00:00') and datetime(ReturnDate)<datetime('2012-12-03 00:00:00') --------------------编程问答-------------------- `还有 你2 号 3号之间没数据  换个数据就好了~
还有就是日期格式必须是012-12-02 16:14:49 而不是2012-12-2 16:14:49
少个0 `~~~~
~太囧了~
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,