2016-11-30 94 views
1

我在android sqlite数据库中比较时间,这里是我在屏幕截图中的表格结构。其实我有两次,像8:00和7:30(基本上这些是员工换班时间)在字符串中,我在我的数据库中有一列c_TIME,我希望所有记录都在我的两个时间B/W (8:00和7:30)从c_TIME开始。Android sqlite时间比较问题

我已经使用这个查询,但它不能正常工作,请人指导我什么,我做错了

SELECT * 
FROM ATTENDANCE 
WHERE strftime('%H','08:00') > strftime('%H', c_TIME) AND 
     time('08:00') < strftime('%H', c_TIME) AND 
     STATE = 'IN' 

enter image description here

+0

上面的查询重播0记录 – Achin

回答

0

下面应该工作:

SELECT * 
FROM ATTENDANCE 
WHERE strftime('%H:%M:%S', c_date) > '07:30:00' AND 
     strftime('%H:%M:%S', c_date) < '08:00:00' AND 
     STATE = 'IN' 

评论:

而不是使用c_TIME字段,您应该使用c_date。实际上,我并没有看到有任何价值观留在专门存储时间的专栏中。

strftime根据某种类型的日期时间/时间戳输入返回一个字符串。来自strftime('%H:%M:%S', c_date)的输出应该具有HH:MM:SS的形式,并且这个字符串可以按字典顺序与08:00:0007:30:00进行比较。比较应该仍然有效,因为对于长度相同的字符串,它仍应该按数字排序。

+0

这个返回0记录 – Achin

+0

@Achin你确定,你甚至都应当返还的任何数据?你问题中的同一张表没有匹配的数据。 –

+0

是的,我有3个值在c_date 2016-11-30 09:18:19,2016-11-25 09:18:19和2016-11-26 06:30:00这是谎言b/w'07:30 :00'和'08:00:00' – Achin

0

尝试:

select * from ATTENDANCE where c_date between 'yyyy-mm-dd' and 'yyyy-mm-dd'; 

而不是使用c_TIME的,使用c_date场。

您可以相应地更改查询中的日期格式以在两个特定时间之间检索数据。

SQLite支持以下格式:

YYYY-MM-DD 

YYYY-MM-DD HH:MM 

YYYY-MM-DD HH:MM:SS 

YYYY-MM-DD HH:MM:SS.SSS 

YYYY-MM-DDTHH:MM 

YYYY-MM-DDTHH:MM:SS 

YYYY-MM-DDTHH:MM:SS.SSS 

HH:MM 

HH:MM:SS 

HH:MM:SS.SSS 

now 

DDDDDDDDDD 

here