如何将日期时间值插入 SQLite 数据库?

Posted

技术标签:

【中文标题】如何将日期时间值插入 SQLite 数据库?【英文标题】:How do I insert datetime value into a SQLite database? 【发布时间】:2010-12-28 08:53:00 【问题描述】:

我正在尝试将日期时间值插入SQLite 数据库。它似乎是成功的,但是当我尝试检索该值时出现错误:

SQL 语句是:

create table myTable (name varchar(25), myDate DATETIME)
insert into myTable (name,mydate) Values ('fred','jan 1 2009 13:22:15')

【问题讨论】:

【参考方案1】:

在需要时使用CURRENT_TIMESTAMP,而不是OF NOW()(即mysql

【讨论】:

这行得通,一件事是错的。 CURRENT_TIMESTAMP 返回没有 UTC 的日期时间,你知道如何解决这个问题吗?提前致谢!【参考方案2】:

读取This: 1.2 Date 和时间数据类型 存储日期和时间的最佳数据类型是:

TEXT 最佳格式是:yyyy-MM-dd HH:mm:ss

然后阅读this页面;这是SQLite 中有关日期和时间的最佳解释。 希望对你有帮助

【讨论】:

你应该考虑用支持你答案的链接来回答问题,而不仅仅是一堆链接【参考方案3】:

SQLite中存储日期的方式是:

 yyyy-mm-dd hh:mm:ss.xxxxxx

SQLite 还有一些你可以使用的日期和时间函数。见SQL As Understood By SQLite, Date And Time Functions。

【讨论】:

仅供参考,.xxxxxx 在@TorValamo 的语法中 = .SSS = SQLite 文档中的 %f,即小数秒。 DateTime.parse('2016-05-28 14:27:00 -0300').strftime('%Y-%m-%d %H:%M:%S') 【参考方案4】:

这可能不是最流行或最有效的方法,但我倾向于放弃SQLite 中的强数据类型,因为它们本质上都是作为字符串转储的。

我之前(当然是在将 SQLite 与 C# 一起使用时)围绕 SQLite 库编写了一个精简的 C# 包装器,以处理对 SQLite 的插入和提取,就像我在处理 DateTime 对象一样。

【讨论】:

如果例如您想按该字段排序;你最终得到一个字符串比较......【参考方案5】:

您必须更改您提供的日期字符串的格式,以便能够使用 STRFTIME 函数插入它。原因是,没有月份缩写选项:

%d  day of month: 00
%f  fractional seconds: SS.SSS
%H  hour: 00-24
%j  day of year: 001-366
%J  Julian day number
%m  month: 01-12
%M  minute: 00-59
%s  seconds since 1970-01-01
%S  seconds: 00-59
%w  day of week 0-6 with sunday==0
%W  week of year: 00-53
%Y  year: 0000-9999
%%  % 

另一种方法是将日期/时间格式化为已接受的格式:

    YYYY-MM-DD YYYY-MM-DD HH:MM YYYY-MM-DD HH:MM:SS YYYY-MM-DD HH:MM:SS.SSS YYYY-MM-DDTHH:MM YYYY-MM-DDTHH:MM:SS YYYY-MM-DDTHH:MM:SS.SSS HH:MM HH:MM:SS HH:MM:SS.SSS 现在

参考:SQLite Date & Time functions

【讨论】:

虽然未在表中列出,但文档还声明您可以添加“Z”或偏移量,例如“-0400”【参考方案6】:

你需要的格式是:

'2007-01-01 10:00:00'

即yyyy-MM-dd HH:mm:ss

但是,如果可能,请使用参数化查询,因为这样您就不必担心格式细节。

【讨论】:

如何使用这样的字符串按日期排序? 当你像这样格式化日期时,日期排序和词法排序的结果是一样的。例如。 '2008-02-01' > '2007-02-01', '2008-01-02' > '2008-01-01' 作为字符串和日期。但是您不必严格关心这一点,因为 SQLite ORDER BY 会为您处理订单。 请注意,您无法使用词汇排序可靠地比较具有不同精度的日期,例如 "SELECT '2007-01-02 10:00:00' > '2007-01-02 10:00' ;"返回 1 但 "SELECT datetime('2007-01-02 10:00:00') > datetime('2007-01-02 10:00');"返回 0。 @itowlson 如果您有多语言应用程序,这将如何工作?

以上是关于如何将日期时间值插入 SQLite 数据库?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Xamarin Forms 中将日期、日期时间和时间保存到 SQLite 数据库?

将日期插入数据库时​​如何替换错误的日期?

在qt中如何用SQLite向表中插入日期型变量?

如何在 SQLite 表中插入日期和查询日期

使用 flask_sqlalchemy 将 HTML 表单中的日期插入 SQlite 数据库

将日期插入 SQLite3