【问题标题】:How do I insert datetime value into a SQLite database?如何将日期时间值插入 SQLite 数据库?
【发布时间】: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')

【问题讨论】:

    标签: sql datetime sqlite


    【解决方案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
    %%  % 
    

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

    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. HH:MM
    9. HH:MM:SS
    10. HH:MM:SS.SSS
    11. 现在

    参考: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 如果您有多语言应用程序,这将如何工作?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-06
    相关资源
    最近更新 更多