【发布时间】:2016-11-04 09:41:46
【问题描述】:
我有兴趣了解在 SQLite 中使用日期时间的不同可能性,并了解它的优缺点。我没有在任何地方找到所有替代方案的详细说明。
到目前为止我已经知道了
SQLite 实际上没有时间戳的原生存储类 / 日期。它将这些值存储为 NUMERIC 或 TEXT 类型的值 取决于输入格式。日期操作是使用内置的 日期/时间函数,它知道如何转换来自另一个的输入 格式。
(引自here)
当需要日期时间之间的任何操作时,我看到了两种不同的方法:
julianday函数
SELECT julianday(OneDatetime) - julianday(AnotherDatetime) FROM MyTable;
返回天数,但这可以是小数。 因此,您还可以通过一些额外的操作来获得其他一些时间度量。 For instance, to get minutes:
SELECT CAST ((
julianday(OneDatetime) - julianday(AnotherDatetime)
) * 24 * 60 AS INTEGER)
显然 julianday 可能会导致一些问题:
请记住,julianday 返回“天”的(小数)数 - 即 24 小时周期,从原始日期的中午 UTC 开始。这通常不是你需要的,除非你碰巧住在 12 小时以西 格林威治。例如。如果你住在伦敦,今天早上同上 julianday 昨天下午。
更多信息在this post。
strftime函数
SELECT strftime("%s", OneDatetime)-strftime("%s", AnotherDatetime) FROM MyTable;
返回秒数。同样,您还可以通过一些额外的操作获得其他一些时间度量。例如,要获得分钟数:
SELECT (strftime("%s", OneDatetime)-strftime("%s", AnotherDatetime))/60 FROM MyTable;
更多信息here。
到目前为止,我的结论是:julianday 似乎更易于使用,但可能会导致一些问题。 strftime 似乎更冗长,但也更安全。它们都只提供单个单位(天、小时、分钟或秒)作为结果,而不是多个单位的组合。
问题
1) 是否有其他可能使用日期时间进行操作?
2) 直接获取两个日期时间在时间上的差异format(或日期或日期时间)的最佳方法是什么,其中日期时间将被格式化为'YYYY-mm-dd HH:MM:SS',结果将是相同的格式?
我原以为下面这样的东西会起作用,但事实并非如此:
SELECT DATETIME('2016-11-04 08:05:00') - DATETIME('2016-11-04 07:00:00') FROM MyTable;
> 01:05:00
【问题讨论】:
-
您使用哪种编程语言?如果这很重要,也许不同的嵌入式数据库引擎更适合您的需求。
-
我结合了python和sqlite。