当前位置:  开发笔记 > 前端 > 正文

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

如何解决《在SQLite数据库中存储日期时间值的最佳方法(Delphi)》经验,为你挑选了2个好方法。

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

由于SQLite没有datetime值的显式数据类型,因此有以下几种选择:

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

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

做点别的.推荐的做法是什么?

我已经阅读了http://www.sqlite.org/lang_datefunc.html但是没有提到要使用的数据类型,并且没有在编程中正式学习,我不太关注朱利安日期.为什么要额外转换?我会仔细阅读这些值,因此字符串和TDateTime之间的任何额外转换都会增加成本.



1> Blorgbeard..:

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

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

如果你需要SQLite日期函数支持,我会使用该方法.

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



2> Nick Bradbur..:

一个折衷方案是坚持使用REAL值,但是使用Delphi的DateTimeToJulianDate将它们存储为julian日期.这样他们仍然可以快速阅读,在对流中几乎没有性能损失,并且他们仍然采用在Delphi之外有意义的格式.

推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有