MySQL查询contract_to大于当前日期结果不符合预期问题
嘿,这个问题我太熟悉啦,一眼就看出问题出在哪了!
问题原因分析
你写的SQL里踩了一个非常常见的小坑——把日期函数CURDATE()用单引号给括起来了!在MySQL里,单引号包裹的内容会被当作普通的字符串处理,而不是去执行这个函数。也就是说,你实际在做的是把contract_to字段和字符串'CURDATE()'做比较,而不是和当前的系统日期(也就是你预期的2019-03-30)进行比较。
那为什么会返回2019-03-20这条不符合预期的记录呢?这是因为MySQL在对比字符串和日期类型的时候,会尝试把字符串转换为日期格式。但'CURDATE()'根本不是合法的日期字符串,转换后会变成0000-00-00,而所有大于0000-00-00的日期都会被筛选出来,所以2019-03-20这条记录也被误选进来了。
解决方案
只需要去掉CURDATE()外面的单引号,让MySQL识别这是一个函数调用就可以解决问题啦!修正后的SQL语句如下:
SELECT `contract_to`, CURDATE() FROM `contacts` WHERE `contract_to` > CURDATE();
这样MySQL就会正确计算出当前日期,然后和contract_to字段的日期值做真实的日期比较,最终就能得到你预期的结果——只有contract_to大于当前日期的记录。
内容的提问来源于stack exchange,提问作者Jijo
相关产品推荐
相关产品推荐

