2013-10-11 335 views
1

我正在處理一個SQLite數據庫,它包含一個存儲值格式爲yyyy-MM-dd HH:mm:ss的列。現在我需要創建一個過濾器來選擇帶有過濾器的行作爲此日期時間列。 查詢:(使用select語句不帶過濾器,我驗證)SQLite數據庫 - 比較日期時間

Select * from tbl_locations where datetime >= '2013-09-11 00:00:00' and datetime <='2013-09-13 00:00:00' 

上面的查詢將返回空集,儘管在此插槽包含值

任何建議,我怎樣才能得到所需的數據集?

+0

我不熟悉SQLite,但我在MySQL中有一個表,它使用'timestamp'類型的變量。是從字符串,日期,長或其他東西讀取的變量?你也可以在桌子上做一個「描述」,以便我們看到現場信息? – zero298

+0

@ zero298:所有比較都是包含日期時間格式的字符串,如yyyy-MM-dd。列是文本類型。 – Hitesh

回答

0

也許從SQLite的文檔的摘錄將幫助您:

1.2日期和時間數據類型

SQLite沒有存儲類存儲日期和/或時間預留。取而代之的是,SQLite的的內置日期和時間函數能夠存儲日期和時間爲TEXT,REAL,或整數值:

  • TEXT爲ISO8601字符串(「YYYY-MM-DD HH:MM:SS .SSS「)。
  • 真實的Julian日數,自中午4714年11月24日格林威治中午以來的天數。根據預測的公曆。
  • INTEGER as Unix Time,自1970-01-01 00:00:00 UTC以來的秒數。

應用程序可以選擇以任何這些格式存儲日期和時間,並使用內置日期和時間函數在格式間自由轉換。

的日期和時間功能,你可以在你的SQL中使用,以構建查詢在http://www.sqlite.org/lang_datefunc.html

0

好的記錄,我在MySQL測試了這一點,但希望它會奏效。我有一個表,使用timestamps,並將列更改爲text類型。然後我嘗試下面的SQL查詢,並得到了相同的結果,我通常會(除了尾隨小數)

SELECT timestamp(stock_quote_timestamp) 
FROM stock.stock_quote 
WHERE stock_quote_timestamp < timestamp('2013-10-07 11:05:30')#@high_date 
AND  stock_quote_timestamp > timestamp('2013-10-03 14:09:03');#@low_date; 

因此,基本上,只要將您的text語句timestamps,使他們正確地比較。哦,你還需要說明你還有什麼,或者你可以做一個複合選擇語句:SELECT *, timestamp(stock_quote_timestamp)...

+0

這不是SQLite! SQLite會使用'date()',你的查詢比較原始的'stock_quote_timestamp'而不是計算的。 –