【发布时间】: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')
【问题讨论】:
我正在尝试将日期时间值插入SQLite 数据库。它似乎是成功的,但是当我尝试检索该值时出现错误:
SQL 语句是:
create table myTable (name varchar(25), myDate DATETIME)
insert into myTable (name,mydate) Values ('fred','jan 1 2009 13:22:15')
【问题讨论】:
在需要时使用CURRENT_TIMESTAMP,而不是OF NOW()(即MySQL)
【讨论】:
SQLite中存储日期的方式是:
yyyy-mm-dd hh:mm:ss.xxxxxx
SQLite 还有一些你可以使用的日期和时间函数。见SQL As Understood By SQLite, Date And Time Functions。
【讨论】:
.xxxxxx 在@TorValamo 的语法中 = .SSS = SQLite 文档中的 %f,即小数秒。
这可能不是最流行或最有效的方法,但我倾向于放弃SQLite 中的强数据类型,因为它们本质上都是作为字符串转储的。
我之前(当然是在将 SQLite 与 C# 一起使用时)围绕 SQLite 库编写了一个精简的 C# 包装器,以处理对 SQLite 的插入和提取,就像我在处理 DateTime 对象一样。
【讨论】:
您必须更改您提供的日期字符串的格式,以便能够使用 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
%% %
另一种方法是将日期/时间格式化为已接受的格式:
【讨论】:
你需要的格式是:
'2007-01-01 10:00:00'
即yyyy-MM-dd HH:mm:ss
但是,如果可能,请使用参数化查询,因为这样您就不必担心格式细节。
【讨论】: