簡體   English   中英

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

[英]SQLite does not have a DATE datatype? How can I workaround this?

SQLite沒有日期的數據類型。

我想知道是否足以在日期字符串之間進行字符串比較,例如Ymd H:i:s (標准的sql日期時間格式)。

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

您可以使用以下數據類型在SQLite中存儲日期:

  • TEXT為ISO8601字符串(“YYYY-MM-DD HH:MM:SS.SSS”)。
  • 真實如朱利安日數,根據公歷4714年11月24日格林威治中午以來的天數。
  • INTEGER as Unix Time,自1970-01-01 00:00:00 UTC以來的秒數。

然后,您可以使用此處列出的功能轉換這些假日期。

現在,您還提到了函數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()

引自Roger

SQLite沒有專用的日期時間類型 ,但確實有一些日期時間函數 遵循這些函數理解的字符串表示格式(實際上只有1-10格式)(將值存儲為字符串)然后你可以使用它們,加上字符串上的詞典比較將匹配日期時間比較(只要你不這樣做)嘗試將日期與時間或日期時間進行比較,這無論如何都沒有多大意義。

根據您使用的語言,您甚至可以獲得自動轉換 (這不適用於SQL語句中的比較,例如示例,但會讓您的生活更輕松。)

我個人喜歡使用unsigned INT和unix時間戳作為日期。 將日期作為整數進行比較非常簡單有效,PHP有許多功能可以使這些日期成為可讀的。

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

使用now()將無法正常工作,因為SQLite不知道這意味着什么。 但是,SQLite知道current_timestamp含義以及具有所需格式的內容

CURRENT_TIMESTAMP的格式為“YYYY-MM-DD HH:MM:SS”。

在MySQL中, current_timestampnow()的同義詞,它也具有所需的格式

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

所以他們都使用ISO-8601時間戳格式,幾乎任何數據庫都可以很容易地在ISO-8601字符串和時間戳之間進行轉換,這是一個很好的便攜式選擇。

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

這也適用於MySQL。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM