2016-08-29 32 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