Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.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
Mysql 为什么双引号会影响比较日期时间的结果?_Mysql_Sql_String_Datetime_Where Clause - Fatal编程技术网

Mysql 为什么双引号会影响比较日期时间的结果?

Mysql 为什么双引号会影响比较日期时间的结果?,mysql,sql,string,datetime,where-clause,Mysql,Sql,String,Datetime,Where Clause,为什么这两个结果不返回相同的结果 SELECT foo FROM bar WHERE addtime > "2020-10-10" # returns several results SELECT foo FROM bar WHERE addtime > 2020-10-10 # zero results 有人能解释为什么吗 (addtime是datetime类型。)这不符合您的要求: where addtime > 2020-10-10 Unquot

为什么这两个结果不返回相同的结果

SELECT foo FROM bar WHERE addtime > "2020-10-10" # returns several results

SELECT foo FROM bar WHERE addtime > 2020-10-10 # zero results
有人能解释为什么吗


addtime
是datetime类型。)

这不符合您的要求:

where addtime > 2020-10-10

Unquoted
2020-10-10
是一种算术运算,返回整数值
2000
。然后,您要求MySQL将其与日期进行比较,因此它尝试将整数转换为日期,这将产生
null
——因此所有行的比较都为false

另一方面,在另一个表达式中,文字日期用双引号括起来,MySQL可以识别它

我建议对文字日期和字符串使用单引号;尽管MySQL允许双引号用于此目的,但这与SQL标准不同,在SQL标准中,双引号表示标识符(如列名或表名),不表示任何附加值。因此:

where addtime > '2020-10-10'

2020-10-10=2000
2020-10-10
是一个值为2000的算术表达式。PS.在MySQL中,您必须使用单引号
,而不是双引号
。因此,它试图将整数转换为日期,这是不明确的。用户手册告诉我们,与datetime列比较时,整数常量会转换为时间戳…但是,从另一面看,这不是常量,而是(常量)表达式…@Akina:是的。我怀疑常数的算术表达式仍然被认为是常数……但这确实没有清楚地写在手册中。