SQLite没有日期的数据类型。
我想知道是否足以在日期字符串之间进行字符串比较,如Y-m-d H:i:s
(标准的sql日期时间格式)。
例如...WHERE date < NOW()...
。这会在某些情况下失败吗?
答案 0 :(得分:5)
您可以使用以下数据类型在SQLite中存储日期:
然后,您可以使用列出的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有许多功能可以使这些日期成为可读的。
答案 3 :(得分:2)
使用now()
将无效,因为SQLite不知道其含义。但是,SQLite知道current_timestamp
的含义和that has the desired format:
CURRENT_TIMESTAMP的格式为“YYYY-MM-DD HH:MM:SS”。
在MySQL中,current_timestamp
是now()
and that also has the desired format的同义词:
将当前日期和时间作为
'YYYY-MM-DD HH:MM:SS'
中的值返回。
因此他们都使用ISO-8601时间戳格式,几乎任何数据库都可以很容易地在ISO-8601字符串和时间戳之间进行转换,这是一个很好的便携式选择。
答案 4 :(得分:1)
我很确定在某些情况下它会失败。 更快的方法是存储time()值(或mktime())并基于time()生成查询。
这也适用于MySQL。