【问题标题】:SQLite does not have a DATE datatype? How can I workaround this?SQLite 没有 DATE 数据类型?我该如何解决这个问题?
【发布时间】:2012-02-12 00:40:02
【问题描述】:

SQLite 没有日期数据类型。

我想知道在 Y-m-d H:i:s(标准 sql 日期时间格式)等日期字符串之间进行字符串比较是否足够。

例如...WHERE date < NOW()...。这在某些情况下会失败吗?

【问题讨论】:

  • 但如果我希望我的查询也与 mysql 兼容,我不能使用这些
  • 对不起。我没明白是什么问题。我只会使用 Unix 时间戳。

标签: php mysql sql sqlite


【解决方案1】:

您可以使用以下数据类型在 SQLite 中存储日期:

  • TEXT 作为 ISO8601 字符串 ("YYYY-MM-DD HH:MM:SS.SSS")。
  • REAL 作为 Julian day numbers,自公元前 4714 年 11 月 24 日格林威治中午以来的天数。根据预测的公历。
  • INTEGER 作为 Unix 时间,自 1970-01-01 00:00:00 UTC 以来的秒数。

然后您可以使用列出的函数here 转换这些假日期。

现在,您还提到了函数NOW(),这在 SQLite 中不起作用。那是为 MySQL 准备的。这将向您展示要使用的 SQLite 语法:

sqlite> select date('now');
2012-02-12
sqlite> select date('now') = date('2012-02-12');
1
sqlite> select date('now') = date('2012-02-11');
0

因此,强烈建议您使用此功能,另一方面,请确保您不要使用NOW()

【讨论】:

  • 十年过去了,sqlite 没有合适的 datetime 支持仍然很可笑。
【解决方案2】:

引自罗杰

SQLite 没有专用的datetime types,但有一个few datetime functions。遵循字符串表示格式(实际上 仅格式 1-10)被这些函数理解(将值存储为 一个字符串)然后你可以使用它们,加上字典比较 在字符串上将匹配日期时间比较(只要你不 尝试将日期与时间或日期时间与时间进行比较,这不会 无论如何,这很有意义)。

根据您使用的语言,您甚至可以获得automatic conversion。 (这不适用于 SQL 语句中的比较,例如 这个例子,但会让你的生活更轻松。)

【讨论】:

    【解决方案3】:

    我个人喜欢使用 unsigned INT 和 unix 时间戳作为日期。将日期作为整数进行比较非常简单有效,PHP 有许多函数可以使这些日期变得可读。

    http://php.net/manual/en/function.date.php

    【讨论】:

      【解决方案4】:

      使用now() 将不起作用,因为 SQLite 不知道是什么意思。然而,SQLite 确实知道 current_timestampthat has the desired format 的含义:

      CURRENT_TIMESTAMP 的格式为“YYYY-MM-DD HH:MM:SS”。

      在 MySQL 中,current_timestampnow() and that also has the desired format 的同义词:

      'YYYY-MM-DD HH:MM:SS' 中的值返回当前日期和时间。

      因此它们都使用ISO-8601 时间戳格式,并且几乎任何数据库都能够非常轻松地在 ISO-8601 字符串和时间戳之间进行转换,因此这是一个很好且可移植的选择。

      【讨论】:

        【解决方案5】:

        我很确定它在某些情况下会失败。 更快的方法是存储 time() 值(或 mktime())并根据 time() 生成查询。

        这也适用于 MySQL。

        【讨论】:

          猜你喜欢
          • 2017-07-02
          • 2020-03-25
          • 2020-02-14
          • 2021-10-23
          • 1970-01-01
          • 2021-07-31
          相关资源
          最近更新 更多