Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php SQLite没有日期数据类型?我如何解决这个问题?_Php_Mysql_Sql_Sqlite - Fatal编程技术网

Php SQLite没有日期数据类型?我如何解决这个问题?

Php SQLite没有日期数据类型?我如何解决这个问题?,php,mysql,sql,sqlite,Php,Mysql,Sql,Sqlite,SQLite没有日期的数据类型 我想知道在日期字符串之间进行字符串比较是否足够,比如Y-m-dh:I:s(标准的sql日期时间格式) 例如,…WHERE date

SQLite没有日期的数据类型

我想知道在日期字符串之间进行字符串比较是否足够,比如
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时间戳。