如何将datetime值插入SQLite数据库?


109

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

<无法读取数据>

SQL语句是:

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

Answers:


153

您需要的格式是:

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

即yyyy-MM-dd HH:mm:ss

但是,如果可能的话,请使用参数化查询,因为这使您不必担心格式详细信息。


用这种字符串如何按日期排序?
IgorGanapolsky

3
像这样格式化日期时,日期排序和词法排序是一样的。例如,作为字符串和日期的'2008-02-01'>'2007-02-01','2008-01-02'>'2008-01-01'。但是,您不必严格考虑这一点,因为SQLite ORDER BY会为您安排订单。
itowlson

7
请注意,您无法使用词汇顺序可靠地比较日期和精度,例如“ 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当您使用多语言应用程序时,它将如何工作?
batmaci

46

在SQLite中存储日期的方法是:

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

SQLite还具有一些可以使用的日期和时间功能。请参见SQLite,日期和时间函数了解的SQL


3
仅供参考,.xxxxxx.SSSSQLite文档中使用@TorValamo的语法= =%f,即小数秒。
Flak DiNenno

2
DateTime.parse('2016-05-28 14:27:00 -0300')。strftime('%Y-%m-%d%H:%M:%S')
rodvlopes '16

17

您必须更改要提供的日期字符串的格式,才能使用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
%%  % 

替代方法是将日期/时间格式化为已经接受的格式:

  1. YYYY-MM-DD
  2. YYYY-MM-DD HH:MM
  3. YYYY-MM-DD HH:MM:SS
  4. YYYY-MM-DD HH:MM:SS.SSS
  5. YYYY-MM-DDTHH:MM
  6. YYYY-MM-DDTHH:MM:SS
  7. YYYY-MM-DDTHH:MM:SS.SSS
  8. 高度:毫米
  9. HH:MM:SS
  10. HH:MM:SS.SSS
  11. 现在

参考:SQLite日期和时间函数


尽管未在表格中列出,但文档也指出您可以添加“ Z”或诸如“
-0400

10

CURRENT_TIMESTAMP在需要时使用,而不是OF NOW()(这是MySQL)


1
这是可行的,一件事是错误的。CURRENT_TIMESTAMP返回不带UTC的日期时间,您知道如何解决此问题。提前致谢!
Ulug'bek Ro'zimboyev'5

8

阅读本文:1.2 Date和Time Datatype存储日期和时间的最佳数据类型是:

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

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


5
您应该考虑回答问题,提供支持您答案的链接,而不仅仅是一堆链接
Gonzalo。-2012年

0

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

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


如果您想按该字段排序,请不要将其切成日期;您最终得到一个字符串比较...
G__
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.