我是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
答案 0 :(得分:1)
要将数据库中的字符串转换为日期/时间,您可以使用StrToDate(const S: string; const AFormatSettings: TFormatSettings)。
AFormatSettings参数可用于配置日期和时间分隔符。
您无法在SQLite 3中声明日期类型:
请参阅:http://www.sqlite.org/datatype3.html
可以使用以下类型:
在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。