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

sunny1260 2012-12-02 05:07:17
--创建表
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' ;
执行后没有结果。请问大家这是怎么回事,弄两天了就是查不出来。
...全文
11122 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
秦剑 2014-12-25
  • 打赏
  • 举报
回复
用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
_暮落_ 2013-07-15
  • 打赏
  • 举报
回复
`还有 你2 号 3号之间没数据 换个数据就好了~ 还有就是日期格式必须是012-12-02 16:14:49 而不是2012-12-2 16:14:49 少个0 `~~~~ ~太囧了~
_暮落_ 2013-07-15
  • 打赏
  • 举报
回复
select * from ReturnGoodsMains where datetime(ReturnDate)>=datetime('2012-12-02 00:00:00') and datetime(ReturnDate)<datetime('2012-12-03 00:00:00')
csdn_风中雪狼 2012-12-03
  • 打赏
  • 举报
回复
用日期时间型 不要用nvarchar
liuxin_0725 2012-12-03
  • 打赏
  • 举报
回复
要把时间转换格式, 以前我遇到过这个问题。 本想发源码 但没找到那个项目,
hard_learner 2012-12-03
  • 打赏
  • 举报
回复
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所以查询不出数据来
yuansy851002 2012-12-03
  • 打赏
  • 举报
回复
把时间类型转换为varchar类型的呢 写错了,更正,呵呵 select * from #table where CONVERT(varchar(16),getdate(),120) between '2012-12-02 00:00' and '2012-12-10 00:00'
yuansy851002 2012-12-03
  • 打赏
  • 举报
回复
把时间类型转换为varchar类型的呢 select * from #table where varchar(16,getdate(),120) between '2012-12-02 00:00' and '2012-12-10 00:00'
nncaixiaobai 2012-12-03
  • 打赏
  • 举报
回复
'2012-12-03 00:00:00' 转成datetime类型在比较试试,应该是时间格式问题
wz122889488 2012-12-03
  • 打赏
  • 举报
回复
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”还小的数据,所以就查不出。
叫我三三 2012-12-03
  • 打赏
  • 举报
回复
以上结果 Sqlite3.0
叫我三三 2012-12-03
  • 打赏
  • 举报
回复

十二恨 2012-12-03
  • 打赏
  • 举报
回复
引用 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里的时间格式是什么
dalmeeme 2012-12-02
  • 打赏
  • 举报
回复
你写成:select * from ReturnGoodsMains where datetime(ReturnDate)>='2012-12-02 00:00:00' and datetime(ReturnDate)<'2012-12-03 00:00:00' ; 试试。
dalmeeme 2012-12-02
  • 打赏
  • 举报
回复
会不会是2012-12-2 00:00:00这种格式不符合要求,sqlite中yyyy-MM-dd HH:mm:ss才被识别为日期,也就是说月份和日都需要2位才行。 http://www.sqlite.org/lang_datefunc.html
sunny1260 2012-12-02
  • 打赏
  • 举报
回复
引用 1 楼 stonespace 的回复:
VARCHAR上进行>=等时间比较是不可靠的,
就算是datetime类型的也是一样,我试过了。。。
stonespace 2012-12-02
  • 打赏
  • 举报
回复
VARCHAR上进行>=等时间比较是不可靠的,

111,120

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧