2016-08-29 29 views
2

我一直在努力,但没有成功,以计算有多少值在特定的星期几创建:的SQLite的strftime()平日

SELECT count(*) as count FROM packets WHERE strftime("%w", timeIn) = '1'; 

我在timeIn

1472434822.60033 
1472434829.12632 
1472434962.34593 

我这个值不知道我在这里做错了什么。

而且,如果我用这个:

SELECT count(*) as count FROM packets WHERE strftime("%w", timeIn) = '6'; 

我得到

2 

这是没有意义的。先谢谢你。

回答

1

您似乎将日期存储为自1970年以来的秒数(Unix纪元) - 一种常见的表示形式。由SQLite date functions接受的时间字符串(参见时间字符串部)默认为解释数字时间字符串作为儒略日数:

类似地,格式12被示出为具有10显著位,但日期/时间函数将真正接受尽可能多的或尽可能少的数字来表示朱利安天数。

您可以用下面的SELECT看到这一点:

SELECT strftime('%Y-%m-%d', 1472428800.6) AS t 

其结果是:

4026-48-26 

为了您的日期表示被解释为Unix的时代,你需要包括'unixepoch'strftime电话:

SELECT strftime('%Y-%m-%d', 1472428800.6, 'unixepoch') AS t 

返回:

2016-08-29 

如果修改SELECT是:

SELECT count(*) as count FROM packets WHERE strftime("%w", timeIn, 'unixepoch') = '6' 

你应该看到的结果与你的期望更多的内联。

+0

谢谢。我尝试,但我没有得到任何回报: 'SELECT count(*)as packets from packets WHERE strftime(“%w”,timeIn,'unixepoch')= 1;' 应该更好地更改格式表单数据库呢? – Joe

+0

您可以尝试一些'SELECT'语句以确保转换符合您的期望。例如,使用问题中的第一个值:'SELECT strftime('%w',1472434822.60033,'unixepoch')AS w,date(1472434822.60033,'unixepoch')AS d''返回'1'和'2016-08- 29'。 – cartant

+0

再次感谢您的回应。我分别获得'1'和'2016-08-29'。奇怪的是,'SELECT count(*)as packets FROM packets WHERE strftime(“%w”,timeIn,'unixepoch')='0''正在返回'3'。星期一应该是一只眼睛? – Joe