2012-02-12 46 views
3

SQLite沒有日期數據類型。SQLite沒有DATE數據類型?我該如何解決這個問題?

我想知道是否足以在日期字符串之間進行字符串比較,如Y-m-d H:i:s(標準的sql datetime格式)。

例如...WHERE date < NOW()...。這在某些情況下會失敗嗎?

+0

http://www.sqlite.org/lang_datefunc.html – dierre 2012-02-12 00:44:50

+0

但我不能使用這些如果我想我的查詢與mysql兼容 – Alex 2012-02-12 00:46:37

+0

對不起。我沒有得到什麼問題。我只會使用Unix時間戳。 – dierre 2012-02-12 11:46:09

回答

5

你可以存儲在SQLite的日期與下列數據類型:

  • TEXT爲ISO8601字符串( 「YYYY-MM-DD HH:MM:SS.SSS」)。
  • REAL作爲朱利安天數,自格林威治中午至公元4714年11月24日中午以來的天數。根據預測的公曆。
  • INTEGER as Unix時間,自1970-01-01 00:00:00 UTC以來的秒數。

然後,您可以使用列出的功能here來轉換這些假日期。

現在,你也提到了函數NOW(),這將無法在SQLite中工作。這是MySQL的。這將顯示你的SQLite使用語法:

sqlite> select date('now'); 
2012-02-12 
sqlite> select date('now') = date('2012-02-12'); 
1 
sqlite> select date('now') = date('2012-02-11'); 
0 

所以,強烈建議您使用此功能,並在另一側,請確保您不使用NOW()

+0

Unix時間的生根 – dierre 2012-02-12 14:17:42

1

我很確定它會在某些情況下失敗。 更快的方法是存儲time()值(或mktime())並根據time()生成查詢。

這也適用於MySQL。

2

就我個人而言,我喜歡使用無符號的INT和日期的unix時間戳。將日期作爲整數進行比較是非常簡單和高效的,而且PHP具有使這些日期成爲可讀的衆多功能。

http://php.net/manual/en/function.date.php

3

引述羅傑

SQLite沒有專門datetime types,但確實有few datetime functions。遵循字符串表示格式(實際上 只有格式1-10)通過那些函數理解(存儲值爲 一個字符串)然後你可以使用它們,加上字典對比 就可以匹配日期時間比較字符串(只要你不要 嘗試將日期與時間或日期時間進行比較,而不是 無論如何都會產生很大的意義)。

根據您使用的語言,您甚至可以獲得automatic conversion。 (這並不適用於比較SQL語句像 的例子,但是會讓你的生活更輕鬆。)

2

使用now()不會起作用,因爲SQLite不知道這是什麼意思。 SQLite的確實,但是,知道什麼current_timestamp手段和that has the desired format

爲CURRENT_TIMESTAMP格式爲 「YYYY-MM-DD HH:MM:SS」。

在MySQL中,current_timestampnow() and that also has the desired format的代名詞:

返回當前日期和時間爲'YYYY-MM-DD HH:MM:SS'值。

所以它們都使用ISO-8601時間戳格式,幾乎所有的數據庫將能夠ISO-8601字符串和時間戳之間的轉換很容易,這樣是一個很好的和便攜式的選擇。

相關問題