SQLite没有日期数据类型。
我想知道在日期字符串之间进行字符串比较是否足够,例如使用标准SQL日期时间格式Y-m-d H:i:s
。
例如...WHERE date < NOW()...
。这种情况会失败吗?
NOW()
,但是这个函数在SQLite中无法使用。以下是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()
函数。
我个人喜欢使用无符号整数和Unix时间戳来表示日期。将日期表示为整数非常简单高效,而PHP也有许多函数可以将这些日期转换为易于阅读的格式。
now()
是行不通的,因为 SQLite 不知道它的含义。SQLite 知道 current_timestamp
的含义并且 它具有所需的格式:
在 MySQL 中,CURRENT_TIMESTAMP 的格式为 "YYYY-MM-DD HH:MM:SS"。
current_timestamp
是 now()
的同义词,也具有所需的格式:
因此,它们都使用 ISO-8601 时间戳格式,几乎任何数据库都可以轻松地在 ISO-8601 字符串和时间戳之间进行转换,因此这是一个良好且可移植的选择。以
'YYYY-MM-DD HH:MM:SS'
的值返回当前日期和时间。
我相当确定在某些情况下它会失败。 一种更快的方法是存储time()值(或mktime()),并基于time()生成查询。
这也适用于MySQL。