DELPHI:Sqlite Date&时间格式,怎么样?请帮忙

时间:2010-11-22 17:06:53

标签: delphi sqlite

我是SQLite的新手,我想知道SQLite中存储日期和时间的最佳格式是什么?

我尝试使用类似的东西保存日期(同样也是TIME)(我将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

3 个答案:

答案 0 :(得分:1)

要将数据库中的字符串转换为日期/时间,您可以使用StrToDate(const S: string; const AFormatSettings: TFormatSettings)

AFormatSettings参数可用于配置日期和时间分隔符。


您无法在SQLite 3中声明日期类型:

请参阅:http://www.sqlite.org/datatype3.html

可以使用以下类型:

  • TEXT as ISO8601字符串(“YYYY-MM-DD HH:MM:SS.SSS”)。
  • 真实的朱利安日数,即公元前4714年11月24日格林威治中午以来的天数。根据预感格里高利历。
  • INTEGER as Unix Time,自1970-01-01 00:00:00 UTC
  • 以来的秒数

在Delphi中,作为使用日期/时间数据库字段类型的一种方法,您可以使用TDateTimeField类型的计算字段并在OnCalcFields事件中执行转换。

更新:要从Unix时间转换为TDateTime,您可以使用单位DateUtils中的UnixToDateTime函数。

答案 1 :(得分:1)

我将Delphi日期存储为Julian日期,并使用Delphi的DateTimeToJulianDate和JulianDateToDateTime处理它们之间的转换。我做了很多涉及日期的查询,并且将日期存储为数字(REAL)值而不是TEXT值可以实现更高效的查询,例如:

SELECT * from table WHERE date(julianday(datecolumn,“LOCALTIME”))= date(julianday(“now”,“LOCALTIME”))

答案 2 :(得分:0)

由于我曾经问过同样的问题,也许我得到的答案会有所帮助: Optimal way to store datetime values in SQLite database (Delphi)

FWIW,我将TDateTime直接存储为SQLite中的REAL值。如果直接查看数据库,它们不是人类可读的,但它比使用字符串更快更容易,因为不执行转换。 Delphi有足够的日期操作方法,可以使SQLite内置的方法冗余。

当然,如果您的数据库不是由Delphi编写的应用程序访问的话,我不推荐使用我的方式,因为他们不会理解Delphi的TDateTime。