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:是的。我怀疑常数的算术表达式仍然被认为是常数……但这确实没有清楚地写在手册中。