2014-01-20 42 views
0

我是一名初学者程序员,我需要构建一个程序,使我能够根据收集到的时间检索记录。我正在python框架内使用SQLite。如何使用时间数据在SQLite中选择记录

我的代码如下:

cur.execute("CREATE TABLE Conc(Timesec INT, Timehrs REAL, Photon INT, hms TEXT);") 

creader = csv.reader(open(FileName, 'rb'), delimiter=',') 
t = (creader,) 
for t in creader: 
    cur.execute("INSERT INTO Conc VALUES(?,?,?,?)", t) 

此代码工作正常,并与下面的数据创建一个表:

time(sec), time(h), photons, time (H:M:S) 
0.0 , 0.0000 ,   0 , 11:16:36 
5.0 , 0.0014 ,  1698 , 11:16:41 
10.0 , 0.0028 ,  1793 , 11:16:46 
15.0 , 0.0042 ,  1764 , 11:16:51 
20.0 , 0.0056 ,  1751 , 11:16:56 
25.0 , 0.0069 ,  1779 , 11:17:01 

肚里了数百万条目每次(一个新纪录5秒)

我试图想出一种方法来使用H:M:S时间来检索行,计算一些平均值,然后将解决方案应用于表中的其他行。我有一个解决方案,它使用以秒为单位的已用时间,但是这使得难以将代码应用到其他文件(它们并不都是同时开始的)。

例如,我的目标是在12:00:00和12:09:00之间调用特定的行。

我已经试过这样:

query= cur.execute("SELECT AVG(Photon) FROM Conc WHERE hms BETWEEN strftime('%M', '12:00:11') AND strftime('%M', '12:09:11');") 
print query 
for row in cur.fetchall(): 
    print "The photons are", row[0] 

这不会引发任何错误,但它返回“光子被无”,所以我显然不是正确的措辞这一点。任何疑难解答或帮助制定更优雅的解决方案将不胜感激。

回答

0

strftime('%M'提取分钟字段从时间:

> SELECT strftime('%M', '12:00:11') 
00 

为了与hms值进行比较,直接使用的时候:如果您想根据长度做任何计算

SELECT ... WHERE hms BETWEEN '12:00:00' AND '12:09:59' 

的时间间隔,最好使用Timesec列代替。

+0

感谢您的建议 - 这会返回相同的问题。它看起来好像没有找到符合这些条件的记录(但它们正在导入和导出,并且所有16,000条记录正在计数)。 我试图避免在我的时间间隔内使用timesec,因为每天都会在常规时间发生事件,并且我的文件从不同时间开始(例如,一天的上午九点和另一天的下午三点)。我想有一个可以处理一切的程序。 – user3037488

+0

我也想知道如果我被行混淆了:我把时间当作线性值处理,而SQL将它当作文本处理,所以不存在“之间”的概念,因为没有行依赖。 – user3037488

+0

在SQLite中,时间戳确实是字符串,但字符串可以很好地进行比较。 –

相关问题