2010-11-22 107 views
1

我是SQLite的新手,我想知道什麼是存儲日期和時間SQLite中的最佳格式?DELPHI:Sqlite日期和時間格式,如何?請幫忙

我試圖用這樣的事情(我設置SQLite的日期/時間字段爲CHAR)

SQLStr:='INSERT INTO MYTABLE ([DATE]) VALUES ('+#39+FormatDateTime('YYYY-MM-DD',MyDate)+#39+')'; 

的ExecSql工作(我認爲)保存日期(類似時間太長),因爲我可以看到添加的日期在桌子裏。

但是,當我嘗試打開使用StrToDate函數的字段時,它總是說,例如,2010-11-23不是有效的日期。

我不確定,但我認爲StrToDate不適合此操作。如果是這樣,那是什麼?

幫助?

謝謝! :)

我用D5,ZeosLib 6.6.6和Sqlite3.dll

+0

MYTABLE的[DATE]字段是什麼數據類型? – jachguate 2010-11-22 17:11:39

+0

@jackguate:我用CHAR – AFF 2010-11-23 00:20:28

回答

1

將字符串轉換在數據庫中的日期/時間,您可以使用StrToDate(const S: string; const AFormatSettings: TFormatSettings)

AFormatSettings參數可用於配置日期和時間分隔符。


不能在SQLite的3申報日期類型:

參見:http://www.sqlite.org/datatype3.html

以下類型可用於:

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

在Delphi的秒數,如使用日期/時間數據庫字段類型的一種方式,你可以使用一個計算TDateTimeField類型的字段並在OnCalcFields事件中執行轉換。

更新:要從Unix時間轉換爲TDateTime,您可以在單位DateUtils中使用UnixToDateTime函數。

+0

謝謝,我應該多讀些關於.. :) – AFF 2010-11-23 00:22:33

1

我將Delphi日期存儲爲Julian日期,並使用Delphi的DateTimeToJulianDate和JulianDateToDateTime處理它們之間的轉換。我做了很多涉及日期的查詢,並且將日期存儲爲數值(REAL)值而不是TEXT值可以實現更高效的查詢,例如:

SELECT * from table WHERE date(julianday(datecolumn,「LOCALTIME」))=日(儒略日(「現在」,「LOCALTIME」))

0

因爲我曾問過同樣的問題詢問,也許我會幫助解答: Optimal way to store datetime values in SQLite database (Delphi)

FWIW,我直接存儲TDateTime類型爲REAL SQLite中的值。如果直接查看數據庫,它們不是人類可讀的,但它比使用字符串更快更容易,因爲沒有執行轉換。 Delphi有足夠的日期處理方法來使SQLite成爲冗餘。

當然,如果您的數據庫將不會被Delphi編寫的應用程序訪問,我們不推薦使用這種方式,因爲他們不瞭解Delphi的TDateTime。