SQLite没有DATE数据类型?我该如何解决这个问题?

时间:2012-02-12 00:40:02

标签: php mysql sql sqlite

SQLite没有日期的数据类型。

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

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

5 个答案:

答案 0 :(得分:5)

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

  • TEXT 为ISO8601字符串(“YYYY-MM-DD HH:MM:SS.SSS”)。
  • REAL 作为朱利安日数,是公元前4714年11月24日格林威治中午以来的天数。根据预感格里高利历。
  • INTEGER as Unix Time,自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()

答案 1 :(得分:3)

引自罗杰

  

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

     

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

答案 2 :(得分:2)

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

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

答案 3 :(得分:2)

使用now()将无效,因为SQLite不知道其含义。但是,SQLite知道current_timestamp的含义和that 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字符串和时间戳之间进行转换,这是一个很好的便携式选择。

答案 4 :(得分:1)

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

这也适用于MySQL。