如何将日期时间值插入 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 数据库?