2011-05-04 64 views
4

我正在使用SQLite的項目和<符號不起作用的查詢。SQLite少於運營商問題

有一個名爲Holidays的表,它有一個數據類型爲datetime的字段。

假設表格包含HolidayDate列中當前年份的某些日期。

SELECT HolidayDate 
    FROM Holidays 
WHERE (HolidayDate >= '1/1/2011') 
    AND (HolidayDate <= '1/1/2012') 

上述查詢中的<符號不起作用。 >符號在上面的查詢工作正常。

請幫幫我。

+0

正是你的意思與 「不工作」 是什麼。你有錯誤嗎? – 2011-05-04 09:24:58

+0

即使有滿足上述條件的行,我也沒有得到任何輸出。沒有錯誤。 – 2011-05-04 09:26:28

+0

節假日的定義是什麼? – 2011-05-04 09:35:25

回答

12

嘗試:

SELECT HolidayDate 
    FROM Holidays 
WHERE HolidayDate >= date('2011-01-01') 
    AND HolidayDate <= date('2012-01-01') 

(date format must be YYYY-MM-DD) 
+0

謝謝。有效。 – 2011-05-04 10:20:45

4

sqlite中沒有datetime數據類型。

SQLite的只有4種類型:

  • integeral數
  • 浮點數
  • 字符串(儲存或者作爲UTF-8或UTF-16和自動轉換)
  • 團塊

此外,sqlite是清單類型的,這意味着任何列可以保存任何類型的值。聲明的類型用於只有兩兩件事:

  • 插入值轉換爲指定類型的如果他們似乎轉換(和它似乎並不適用於與sqlite_bind_*方法必定會在所有值)
  • 它提示索引或優化以某種方式(我只知道它有使用索引時沒有輸入列麻煩)

更糟糕的是,sqlite的會默默接受什麼類型。如果它以「int」開頭,如果它包含「char」或「text」,則它會將其解釋爲整數類型,如果其爲「real」,「double」或「number」並且爲blob如果它是「blob」。在其他情況下,該列僅僅是無類型的,這對於sqlite來說沒有問題,因爲輸入的方式很少。

這意味着'1/1/2011'只是一個字符串,既不以格式'mm/dd/yyyy'進行日期格式爲'dd/mm/yyyy'的日期按按日期排序的格式(unicodebetically確實) 。

如果您以ISO格式('yyyy-mm-dd')存儲日期,則asciibetical排序將與日期排序兼容,您將沒有問題。

+0

我以ISO格式存儲日期。我怎樣才能得到上述查詢的輸出。我可以使用>和<日期 – 2011-05-04 09:55:30

+1

是的,使用'<' and '>'。 Sqlite將它們作爲字符串進行比較,但在ISO格式中,它與作爲日期進行比較一致。只要確保將0填入固定寬度的字段中,即始終使用「01」而不是「1」。 – 2011-05-04 10:48:40