2012-04-12 128 views
-2

日期操作之間我有一個表student有以下的列:在SQLite數據庫

no - integer 
name - string 
startdate - date 
enddate - date. 

日期格式是MM/DD/YYYY

我會給出一個日期作爲輸入。現在我需要查詢在開始日期和結束日期之間找到的inputdate

對於一個例子,我會給04/14/2012,那麼查詢應返回的第一個記錄如下圖。

(因爲輸入日期(04/14/2012)是04/10/2012之間發現到04/20/2012

請幫助我。

enter image description here

+0

您可以在比較日期的位置添加SQL查詢嗎? – 2012-04-12 14:29:52

回答

3

你有被你的假設的SQLite有一個日期/時間類型的時候,其實它並不造成問題。

我建議你閱讀以下http://www.sqlite.org/datatype3.html有一個更好的瞭解sqlite的類型。

MM/DD/YYYY格式的日期由SQLite作爲文本處理,所以這些日期被作爲字符串進行比較。例如,如果直接比較,則認爲02/01/2012被sqlite認爲大於01/02/2012

您需要將這些日期轉換爲可以是字符串比較的格式。以下是一個示例:

sqlite> create table foo (d TEXT); 
sqlite> insert into foo values ('02/01/2012'); 
sqlite> select substr(d, 7, 4) || substr(d, 1, 2) || substr(d, 4, 2) from foo; 
20120201 
2

你應該張貼你已經到目前爲止已經試過。

應該有一個between條款,您可以使用:

select * from table 
where inputdate between startdate and enddate 
0

作爲SQLite日期類型的日期不存在。有很多方法可以處理日期 - 從1970年1月1日(unixepoch)將它們存儲爲整數秒,或者將它們存儲爲字符串,但如果這樣做,那麼您確實需要以'YYYY-MM-DD'格式存儲它們因爲那是日期函數需要的輸入。

假設你使用字符串格式我建議,然後你的查詢將看起來像

SELECT * FROM Table WHERE Date(Inputdate) BETWEEEN Date(startDate) AND Date(EndDate); 

(雖然你可能希望將日期列的輸出與

格式化爲美國日期格式的格式
SELECT Strftime("%m/%d/%Y",startDate) As StartDate ... 

如果使用自1970年以來秒的容易一些,因爲秒只是比較,而無需將其轉換爲日期,但你仍然可能要在美國日期格式輸出,所以...

SELECT Strftime("%m/%d/%Y",startDate) As StartDate ... FROM Table WHERE inputDate BETWEEN startDate and EndDate; 
0

sqlite> select *from tbl_node where mydate between '2014-02-02' and '2014-02-06';

它顯示輸出: -

1|1|123|456|12eb-ab|1|1|254|123|19|2014-02-03 16:00:44 
2|1|123|456|12eb-ab|1|1|254|123|19|2014-02-03 16:01:03 
3|1|123|456|12eb-ab|1|1|254|123|19|2014-02-03 16:00:57 
4|1|123|456|12eb-ab|1|1|254|123|19|2014-02-03 16:00:34 

這裏指明MyDate是tbl_node列名; 我們也可以使用從現在開始使用。

sqlite> select *from tbl_node where mydate between '2014-02-02' and 'now';