delphi - 在 SQLite 数据库(Delphi)中存储日期时间值的最佳方式

标签 delphi datetime sqlite format

我将在 SQLite 数据库中存储日期时间值(使用 Delphi 和 DISqlite 库)。数据库的性质是永远不需要在计算机或系统之间传输,因此互操作性不是约束。相反,我的重点是阅读速度。日期时间字段将被编入索引,我将对其进行大量搜索,并按顺序读取数以千计的日期时间值。

由于 SQLite 没有明确的日期时间值数据类型,因此有几种选择:

  • 使用 REAL 数据类型并直接存储 Delphi 的 TDateTime 值:速度最快,加载时无需从字符串转换;不可能使用诸如 SQLiteSpy 之类的数据库管理器来调试日期,因为日期将不是人类可读的。不能使用 SQLite 日期函数(?)

  • 使用简单的字符串格式,例如YYYYMMDDHHNNSS:需要转换但在 CPU 上相对容易(无需扫描分隔符),数据是人类可读的。仍然不能使用 SQLite 日期函数。

  • 做点别的。建议做什么?

我已阅读 http://www.sqlite.org/lang_datefunc.html但是没有提到要使用什么数据类型,而且由于没有接受过正规的编程教育,我不太理解 Julian 日期的重点。为什么要进行额外转换?我将大量阅读这些值,因此字符串和 TDateTime 之间的任何额外转换都会增加大量成本。

最佳答案

您可以使用 SQLite 支持的字符串格式之一,例如。 YYYY-MM-DD HH:MM:SS.SSS

它就像 YYYYMMDDHHNNSS 一样简单 - 您仍然不需要扫描分隔符,因为所有数字都是固定长度的 - 您将获得 SQLite 日期函数支持。

如果您需要 SQLite 日期函数支持,我会采用该方法。

如果不是,我建议使用 REAL 值。您仍然可以将它们相互比较(更高的数字在时间上更晚),并分别考虑日期和时间(分别在小数点之前和之后)而不转换为 TDateTime。

关于delphi - 在 SQLite 数据库(Delphi)中存储日期时间值的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2106254/

相关文章:

使用 VCL 样式时,ListView 行选择在 Icon 周围被切断

python - dateutil.parser 解析 "%Y:%m:%d"格式的日期时出现奇怪的结果

sql - 两列SQL的唯一组合值

android - SQLiteStatement - 列不是唯一的 - Android?

javascript - 如何使用 'Temporal' API在不同的日历日期之间进行转换

python - 从 python sqlite 异常获取更多信息

multithreading - Delphi - 线程框架

delphi - 如何在派生类型中使用泛型方法

delphi - 如何启动使用官方 TTrayIcon (delphi) 最小化的应用程序?

python - 以小时和分钟计算两个 Pandas 列之间的时间差