Php SQLite没有日期数据类型?我如何解决这个问题?
SQLite没有日期的数据类型 我想知道在日期字符串之间进行字符串比较是否足够,比如Php SQLite没有日期数据类型?我如何解决这个问题?,php,mysql,sql,sqlite,Php,Mysql,Sql,Sqlite,SQLite没有日期的数据类型 我想知道在日期字符串之间进行字符串比较是否足够,比如Y-m-dh:I:s(标准的sql日期时间格式) 例如,…WHERE date
Y-m-dh:I:s
(标准的sql日期时间格式)
例如,
…WHERE date
。这在某些情况下会失败吗?我很确定它在某些情况下会失败。
更快的方法是存储time()值(或mktime())并基于time()生成查询
这也适用于MySQL。我个人喜欢使用未签名的INT和unix时间戳作为日期。将日期作为整数进行比较是非常容易和有效的,PHP有许多函数可以使这些日期成为可读的 引用罗杰的话 SQLite没有专用的,但有一个。遵循字符串表示格式(实际上是 仅格式1-10)可由这些函数理解(将值存储为 一个字符串),然后您可以使用它们,再加上词典比较 字符串上的值将匹配日期时间比较(只要不匹配) 尝试将日期与时间或日期时间与时间进行比较,但事实并非如此 无论如何,这很有道理) 根据您使用的语言,您甚至可以获得。(这不适用于SQL语句中的比较,例如 举个例子,但会让你的生活更轻松。) 使用
now()
将不起作用,因为SQLite不知道这意味着什么。然而,SQLite知道当前时间戳的含义,并且:
当前时间戳的格式为“YYYY-MM-DD HH:MM:SS”
在MySQL中,current\u timestamp
是以下内容的同义词:
将当前日期和时间作为值返回到'YYYY-MM-DD HH:MM:SS'
因此,它们都使用时间戳格式,并且几乎任何数据库都能够非常轻松地在ISO-8601字符串和时间戳之间转换,因此这是一个好的可移植选择。您可以使用以下数据类型在SQLite中存储日期:
- 文本作为ISO8601字符串(“YYYY-MM-DD HH:MM:SS.SSS”)
- REAL作为朱利安日的数字,是指根据公历,从公元前4714年11月24日格林威治中午开始的天数
- 整数作为Unix时间,自UTC 1970-01-01 00:00:00以来的秒数李>
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()
,但如果我希望我的查询与mysql兼容,我无法使用这些函数。对不起。我不知道问题出在哪里。我只会使用Unix时间戳。