背景
今天看到一个mysql比较有意思的操作,大概是这样的结构:
select subString("20221019180754",1,8) = curdate() = 0;
以前从来没见过这样的写法,很好奇这是什么操作,特地研究一下
分析步骤
- 先讲上面的语句放到mysql里面执行一下,看看会返回什么结果
返回了一个0
- 执行步骤拆解
执行select subString("20221019180754",1,8);
,返回了20221019
执行select curdate();
,返回了2022-10-19
执行select subString("20221019180754",1,8) = curdate();
,返回了1
思考:那到底是相等返回1,还是不相等返回1呢?
验证一下,执行select subString("20991019180754",1,8) = curdate();
语句(年份不一样),返回的结果是0
总结
那也就是说,当两边结果相等的时候会返回1,不相等的时候返回0,日期格式也会自动格式化为一致的类型对比。那回到最开始的题目上,select subString("20221019180754",1,8) = curdate() = 0;
就是3个结果进行对比,看看是不是3个结果都相等。我们已知select subString("20221019180754",1,8) = curdate();
的结果是1,那select 1 = 0
的结果就是0了,一整个结果即为0。
这个语句的现实意义是:对比数据库保存的日期与当前日志对比是否不相等。不相等返回1(select 0 = 0返回1 ),相等返回0。